java中double计算精度问题
来源:互联网 发布:网络诊断dns未响应win7 编辑:程序博客网 时间:2024/05/16 17:31
最近在工作中碰到一个关于double精度的问题,记录下。
首先见如下代码,最终的计算结果是不相等的,因为最终invoiceItemMoneyAmount的值变成了168.82000000000002
double money= 168.82;List<String> itemMoneyList = Lists.newArrayList();itemMoneyList.add("23.80");itemMoneyList.add("3.00");itemMoneyList.add("142.02");double invoiceItemMoneyAmount = 0.00;for(String itemMoney : itemMoneyList){ invoiceItemMoneyAmount = invoiceItemMoneyAmount + Double.valueOf(itemMoney);}if(money == invoiceItemMoneyAmount) System.out.println("hello world");
为什么是这样呢?研究了下,查了一些资料,原因是这样的:
在Java中浮点数类型:double,一般不能进行运算,不只是Java,其他语言也是这样的。在effective Java一书中也有提到过,double一般只能用作科学计算或者工程计算,在商业计算中一般使用java.math.BigDecimal,所以需要通过BigDecimal的add方法来进行计算就可以解决这个问题。
如下代码,结果计算就是相同的了。
double money= 168.82;List<String> itemMoneyList = Lists.newArrayList();itemMoneyList.add("23.80");itemMoneyList.add("3.00");itemMoneyList.add("142.02");BigDecimal invoiceItemMoneyAmount = new BigDecimal("0");for(String itemMoney : itemMoneyList){ invoiceItemMoneyAmount = invoiceItemMoneyAmount.add(new BigDecimal(itemMoney));}if(money == invoiceItemMoneyAmount.doubleValue()) System.out.println("hello world");
阅读全文
0 0
- java中double计算精度问题
- Java计算double精度问题
- java中double、float类型计算精度丢失问题
- Java中double数据类型计算会损失精度问题
- java中解决double计算精度不准确问题
- Java 中double变量的精度计算
- JAVA中double类型计算精度控制
- Java中double的精度问题
- java中Double类型精度问题
- java 中double的精度问题
- Java中double类型精度丢失问题
- java中float,double的精度问题
- double 计算精度的问题
- java double float 精度计算
- java double 计算损失精度
- java double 计算损失精度
- JAVA计算double精度丢失
- java中float/double浮点数的计算失精度问题
- vue 更新data中的数组
- 算法---判断101-200之间有多少个素数,并输出所有素数。
- 软件工程(C编码实践篇)”实验报告实验七:将menu设计为可重用的子系统
- Java 高并发综合
- 排序算法-冒泡排序
- java中double计算精度问题
- 打造前端 Deepin Linux 工作环境——GUI图形压缩软件 PeaZip 的安装与设置
- 浅谈CGLIB动态代理和JDK动态代理 学习笔记
- View的dispatchKeyEvent源码分析
- 搜索算法:顺序搜索和二分搜索
- first day
- 刘明春总结《2017年11月5号》【连续第9天总结】
- 电路识图
- JS中关于原型与原型链