一般货币计算的时候都要用到BigDecimal类,为什么一般不适用float或者double呢?

先看一下浮点数的二进制表示:

小数 0.125

0.125 * 2 = 0.25

0

0.25 * 2 = 0.5

0

0.5 * 2 = 1

1

算法是 *2 直到没有小数为止  ,得到0.125 二进制表示为0 . 0 0 1

小数 0.9

0.9 * 2 = 1.8

取整数部分 1

0.8(1.8的小数部分) * 2 = 1.6

1

0.6 * 2 = 1.2

1

0.2 * 2 = 0.4

0

0.4 * 2 = 0.8

0

0.8 * 2=1.6

1

0.6 * 2 =1.2

0

…..

….

从上至下:1 1 1 0 0 1 0 ......

计算过程无限循环,乘以2永远不可能消灭小数部分,这就证明,小数的二进制有时并不能精确表示;

这就如同十进制不能表示1/3一样;

货币类计算要求精度较高,非常大量的,很小的精度误差也会积少成多变成大误差,所以需要用到BigDecimal。

参考:https://blog.csdn.net/tfstone/article/details/81392540

转载于:https://www.cnblogs.com/jayworld/p/10107335.html

为什么要用BigDecimal相关推荐

  1. BigDecimal 转换为int 或者其他类型

    我列举了转换的方法 BigDecimal HALF_UP = new BigDecimal("-12.44").setScale(1, RoundingMode.HALF_UP); ...

  2. Android 金钱计算BigDecimal 的使用

    今天做了一个购物车的功能 ,设计到了钱的计算,使用到了BigDecimal 晚上回来总结下 这个BigDecimal 计算钱呢很好用 其主要有 1 add 加法 2 subtract 减法 3 mul ...

  3. 在进行商业运算时解决BigDecimal的精度丢失问题

    System.out.println(0.05+0.01); System.out.println(1.0-0.42); System.out.println(4.015*100); System.o ...

  4. java striptrailingzeros_java – 为什么不BigDecimal.stripTrailingZeros()总是删除所有尾随零?...

    我做了以下事情 MathContext context = new MathContext(7, RoundingMode.HALF_UP); BigDecimal roundedValue = ne ...

  5. js 实现精确加减乘除运算之BigDecimal.js

    在前端实际开发中,进行前端计算会出现丢失精度的问题,这里我们项目中运用了BigDecimal.js. js计算丢失精度原因 计算机的二进制实现和位数限制有些数无法有限表示.就像一些无理数不能有限表示, ...

  6. Java中BigDecimal工具类(支持空值运算版)

    点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 前言 需要计算的场景绕不过去会使用BigDecimal类, ...

  7. 为什么阿里巴巴禁止使用BigDecimal的equals方法做等值比较?

    点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! BigDecimal,相信对于很多人来说都不陌生,很多人都 ...

  8. 面试:BigDecimal一定不会丢失精度吗?

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 来源 | urlify.cn/ZVN7Nb 我们基本已经形成了常识 ...

  9. Java中的BigDecimal类你真的了解吗?

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 作者:HikariCP www.jianshu.com/p/c81 ...

  10. 如何使用BigDecimal?

    点击上方"方志朋",选择"设为星标" 做积极的人,而不是积极废人 本文来源于读者投稿,已授权原创申明. 前言:BigDecimal的产生背景 在Java的8种基 ...

最新文章

  1. jQuery在线手册
  2. 文件上传案例的服务器端
  3. stm32机械臂资料含视频
  4. 前端学习(600):使用chorme devtools进行开发
  5. 名词解释说明用英语怎么说_“恍然大悟”用英语怎么说?
  6. org.apache.http.NoHttpResponseException
  7. 2017.4.19 多项式输出 思考记录
  8. java web应用开发渐进教程_Java Web应用开发渐进教程
  9. React的this.props.children
  10. Java实现 已知ListString list = new ArrayListString();list .add(张三丰,北京);......要求:求出每个地区有多少人,都是谁?
  11. 经传主力控盘指标公式 清晰的主力控盘程度详解 通达信选股指标
  12. ps批量把文件名添加到图像_自动为带有文件名的投资组合图像添加字幕
  13. WaWa的奇妙冒险(第二周集训自闭现场)
  14. 图像处理大型科普——图像直方图
  15. Android Gradle权威指南
  16. linux ppp用户管理,linux下ppp拨号上网
  17. (六)CMake与FFTW
  18. Python代码打印爱心
  19. Linux版的led显示屏控制软件,led显示屏控制软件
  20. mybatis mysql 1048_mybatis连接MySQL8出现的问题解决方法

热门文章

  1. .NET库和向后兼容的技巧——第3部分
  2. PYPL 7 月榜单公布:Java 份额出现下降趋势
  3. 微软为 Java 开发者推出 VSCode 安装程序
  4. IIS日志-网站运维的好帮手
  5. java当前目录指什么_是什么决定了Tomcat Java进程的当前工作目录?
  6. html 隐藏input
  7. 冯偌依曼计算机的基本原理是,03级计算机专《计算机组成原理》试卷A.doc
  8. python智慧树章节答案_Python程序设计_知到智慧树_章节答案
  9. 智能灯控制页面用HTML编写,智能家居系统中智能化灯光控制的设计实现
  10. PHP生成海报 文字描边,php实现图片添加描边字和马赛克的方法