如 :19.9-9.9=9.9999999999999,而不是10double相减会转换成二进制,因double有效位数为 16位这就会出现存储小数位数不够的情况,这种情况下就会出现误差

//两个Double数相加

public static Double add(Double v1,Double v2){

BigDecimal b1 = new BigDecimal(v1.toString());

BigDecimal b2 = new BigDecimal(v2.toString());

return b1.add(b2).doubleValue();

}

//两个Double数相减

public static Double sub(Double v1,Double v2){

BigDecimal b1 = new BigDecimal(v1.toString());

BigDecimal b2 = new BigDecimal(v2.toString());

return b1.subtract(b2).doubleValue();

}

// 两个Double数相乘

public static Double mul(Double v1,Double v2){

BigDecimal b1 = new BigDecimal(v1.toString());

BigDecimal b2 = new BigDecimal(v2.toString());

return b1.multiply(b2).doubleValue();

}

//两个Double数相除

public static Double div(Double v1,Double v2){

BigDecimal b1 = new BigDecimal(v1.toString());

BigDecimal b2 = new BigDecimal(v2.toString());

return b1.divide(b2,DEF_DIV_SCALE,BigDecimal.ROUND_HALF_UP).doubleValue();

}

//两个Double数相除,并保留scale位小数

public static Double div(Double v1,Double v2,int scale){

if(scale<0){

throw new IllegalArgumentException(

"The scale must be a positive integer or zero");

}

BigDecimal b1 = new BigDecimal(v1.toString());

BigDecimal b2 = new BigDecimal(v2.toString());

return b1.divide(b2,scale,BigDecimal.ROUND_HALF_UP).doubleValue();

}

//进行四舍五入

BigDecimal b1 = new BigDecimal(d);

BigDecimal b2 = new BigDecimal(1);

// 任何一个数字除以1都是原数字

// ROUND_HALF_UP是BigDecimal的一个常量,

表示进行四舍五入的操作

return b1.divide(b2, len,BigDecimal.

ROUND_HALF_UP).doubleValue();

}

两个double相减_double类型相减有小数误差相关推荐

  1. java double保留四位小数_double类型数据保留四位小数的另一种思路

    来源:透析公式处理,有时候数据有很长的小数位,有的时候由在四位以内,如果用一般的处理方法,那么不足四位的小树会补充0到第四位,这样子有点画蛇添足的感觉,不太好看.所以要根据小数的位数来处理判断. 思路 ...

  2. sql中两个时间类型相减得到的值

    原文地址为: sql中两个时间类型相减得到的值 原文地址:http://my.oschina.net/zimingforever/blog/57504 sql中两个时间类型相减得到的值 今天有人把数据 ...

  3. 五十六、从高中碾转相除法、更相减损术算法谈起

    @Author:Runsen 编程的本质来源于算法,而算法的本质来源于数学,编程只不过将数学题代码化. ---- Runsen 先问你们一个小学问题:如何求两个整数的最大公约数? 曾经见过不少的算法题 ...

  4. c语言碾转相除法,从高中碾转相除法、更相减损术算法谈起

    编程的本质来源于算法,而算法的本质来源于数学,编程只不过将数学题进行代码化.「---- Runsen」 先问你们一个小学问题:「如何求两个整数的最大公约数?」 曾经见过不少的算法题,发现有的并不在数据 ...

  5. 更相减损法java,五十6、从高中碾转相除法、更相减损术算法谈起

    「@Author:Runsen」git ❝ 编程的本质来源于算法,而算法的本质来源于数学,编程只不过将数学题进行代码化.「---- Runsen」github ❞ 先问大家一个小学问题:「如何求两个整 ...

  6. 更相减损法java,五十六、从高中碾转相除法、更相减损术算法谈起

    「@Author:Runsen」❝ 编程的本质来源于算法,而算法的本质来源于数学,编程只不过将数学题进行代码化.「---- Runsen」❞ 先问你们一个小学问题:「如何求两个整数的最大公约数?」 曾 ...

  7. Java中比较两个Double类型数据的大小

    在java中int类型比较可以用"==",而double类型的数据不能用"= ="比较,否则得到永不相等的结果. 一般可以Double的doubleToLong ...

  8. c语言求出两个最大素数,求两个正整数的最大公约数      思路:这是一个很基本的问题,最常见的就是两种方法,辗转相除法和辗转相减法。通式分别为 f(x, y) = f(y, x%y...

    求两个正整数的最大公约数 思路:这是一个很基本的问题,最常见的就是两种方法,辗转相除法和辗转相减法.通式分别为 f(x, y) = f(y, x%y), f(x, y) = f(y, x - y) ( ...

  9. C中不能直接比较两个double类型

    在比较float 和double类型的时候,因为float/double精度的问题,比如1.000000001可能和1.0000000000001相等,不应该直接使用a>b等类似的方式进行比较, ...

最新文章

  1. python求组合数c_【Python】算法之求组合
  2. 虚拟化系列-Windows server 2012 虚拟机管理
  3. Cluster table import - BSP UI component source code is actually stored in cluster table
  4. Java 使用Collections.reverse对list集合进行降序排序
  5. 豆瓣上关于一万小时天才理论一书的一个评论
  6. session在.ashx文件操作问题
  7. PowerShell实现“机器人定时在企业微信群中发送消息”功能(上)
  8. manifest离线缓存技术
  9. docker run -di -p 日志_docker随手笔记第十一节 portainer.io安装使用,比k8s简单
  10. 新域名后缀的主要优点是什么?
  11. java 中文分词转拼音_如何实现拼音与汉字的互相转换
  12. 不知道如何raw转换成jpg格式?可以试试这几个软件
  13. 东南大学成贤学院计算机类怎么样,东南大学成贤学院什么专业比较好 怎么选择专业...
  14. 分享几套Easypanel用户后台模板源码优化版
  15. java求三角形周长 面积_计算三角形的周长和面积 java
  16. ubuntu设置宽带连接及wifi共享
  17. Nginx 单IP绑定多域名配置 顶级域名重定向到www域名
  18. 怎么删除计算机c盘应用,怎样删除电脑c盘中的垃圾
  19. 外显子和基因组基本概念(二)
  20. OpenGL播放yuv数据流(着色器SHADER)-IOS(一)

热门文章

  1. ABB机器人系统输入输出信号System Input和Output详解(二)
  2. 解决报错:全局安装@tarojs/cli后,使用taro命令报错:无法将“taro”项识别为 cmdlet、函数、脚本文件或可运行的...
  3. Lucene-4.8.1+paoding-analysis菜鸟试验:中文索引和查询
  4. 特征点匹配——FAST特征点检测
  5. 名词解释第二十六讲:热钱包
  6. DoubleTake for Mac(全景拼图软件)
  7. api可以主动采集用户数据吗_数据采集方式有哪些,都有什么特点?
  8. ASP.NET用户自定义分页控件
  9. 【Axure视频教程】固定中继器表格首列
  10. matlab判断图片颜色计算像素值