float f = 280.8f;
System.out.println(f*100);
结果是什么?
结果是:28080.0f(我是这么想的)
实际结果是:28079.998

既然float处理有问题换double会不会有问题呢?
double f = 280.8d;
System.out.println(f*100);
结果是:28080.0
结果神奇般的达到了预期!是不是换double就好了呢?
再试一下
double f = 280.71d;
System.out.println(f*100);
结果是:28070.999999999996
是不是很坑呢?

再提供一种处理方式
BigDecimal d = new BigDecimal("280.71");
System.out.println(d.multiply(new BigDecimal("100")).doubleValue());
结果是:28071.0
再试试其他数据貌似也没问题了。

问题原因分析:280.8是十进制数据,计算机使用二进制数据表示。浮点数精度7位,double类型精度15位,BigDecimal API上的解释 Immutable, arbitrary-precision signed decimal numbers.
所以简单来说float存在精度丢失。double也存在,只是存在范围不同。BigDecimal能保存最大精度。涉及到计算非常在意精度请使用BigDecimal

最新文章

  1. 常见开发需求之前端利器webstorm中的git和快捷键
  2. 【HTML5】canvas画布练习
  3. 一些Demo链接
  4. Android——Dialog
  5. [转] Qt 多线程学习
  6. 各个手机APP客户端内置浏览器useragent
  7. 【原】centos6.5下hadoop cdh4.6 安装
  8. Image控件的简单使用示例1
  9. CLR via C# - Char_String
  10. 关于callContext
  11. leetcode415---字符串大数相加
  12. Cannot read property 'component' of undefined 即vue-router 0.x转化为2.x
  13. DDGScreenShot--iOS 图片处理--多图片拼接 (swift)
  14. Python将html转化为pdf
  15. 扩展方法IEnumerable<T>转换为IList<SelectListItem> ,提供@Html.DropDownList使用
  16. (7)Python赋值机制
  17. 插入排序算法的JAVA实现
  18. 〖Linux〗Shell十进制数值转换十六进制
  19. 为spring代理类设置属性值
  20. OPC and .NET

热门文章

  1. MySQL表行数查询最佳实践
  2. linux 命令 — xargs
  3. 菜鸟系列docker——docker仓库(2)
  4. eclipse team 没有svn
  5. React 中无用但可以装逼的知识
  6. Perl一行式:处理空白符号
  7. SpringBoot系列——WebSocket
  8. 【golang-GUI开发】QSS的使用(一)———QSS入门指南
  9. Spring Boot搭建Web项目常用功能
  10. Base64字符保存图片,图片转换成Base64字符编码