小数精确计算 

 System.out.println(2.00 -1.10);//0.8999999999999999

 上面的计算出的结果不是 0.9,而是一连串的小数。问题在于1.1这个数字不能被精确表示为一个double,因此它被表 

 示为最接近它的double值,该程序从2中减去的就是这个值,但这个计算的结果并不是最接近0.9的double值。 

 一般地说,问题在于并不是所有的小数都可以用二进制浮点数精确表示。 

 二进制浮点对于货币计算是非常不适合的,因为它不可能将1.0表示成10的其他任何负次幂。 

 解决问题的第一种方式是使用货币的最小单位(分)来表示: 

 System.out.println(-);//

 第二种方式是使用BigDecimal,但一定要用BigDecimal(String)构造器,而千万不要用 BigDecimal(double)来构造(也不能将float或double型转换成String再来使用BigDecimal(String)来构造,因为在将float或double转换成String时精度已丢失)。
例如new BigDecimal(0.1),
它将返回一个BigDecimal,
也即0.,
正确使用BigDecimal,程序就可以打印出我们所期 望的结果0.: System.out.println(new BigDecimal("2.0").subtract(new BigDecimal("1.10")));// 0.9 另外,如果要比较两个浮点数的大小,要使用BigDecimal的compareTo方法。

最新文章

  1. [OpenCV] Samples 07: create_mask
  2. offline .net3.5
  3. 关于window.onload,window.onbeforeload与window.onunload
  4. 控制反转(IOC)和依赖注入(DI)的区别
  5. 发现木马C:\windows\system32\FastUserSwitchingCompatibilityex.dll
  6. DataSnap数据库连接池,数据集对象池的应用
  7. 你可以用OpenCV来干什么
  8. MVC 点击下载文档
  9. ECSHOP订单一键发货简化订单发货流程
  10. js中的ajax的运用
  11. HTML5画布(线条、渐变)
  12. FastJSON 简单使用
  13. 【leetcode系列】Valid Parentheses
  14. GMM的EM算法
  15. Winform中node.Text重命名时窗口无响应假死的解决方法
  16. 尝试造了个工具类库,名为 Diana
  17. oracle表中字段的添加、删除
  18. 初识Dubbo+Zookeeprt搭建SOA项目
  19. No such property: FOR_RUNTIME for class: org.gradle.api.attributes.Usage
  20. 关于pdfbox操作pdf的分享链接手长

热门文章

  1. qbzt day2 下午
  2. write()与writelines()
  3. sklearn版本
  4. Java 基础-异常处理
  5. windows 10上玩耍ubuntu
  6. [11期]绕过安全狗、云锁等各大WAF注入,上传深入自动化Bypass攻击
  7. Http中Content-Type的取值讲解
  8. Path.GetExtension 方法 (String)
  9. luogu 3426题解 (KMP)
  10. Excel VBA批量处理寸照名字