0.1如何转换二进制
0.1如何转换二进制
十进制转换二进制时存在精度问题,导致小数计算出错
十进制转换二进制的算法:十进制小数转二进制,小数部分,乘 2 取整数,若乘之后的小数部分不为 0,继续乘以 2 直到小数部分为 0 ,将取出的整数正向排序。
例如:十进制0.1转换二进制
0.1 * 2 = 0.2 --------------- 取整数 0,小数 0.2
0.2 * 2 = 0.4 --------------- 取整数 0,小数 0.4
0.4 * 2 = 0.8 --------------- 取整数 0,小数 0.8
0.8 * 2 = 1.6 --------------- 取整数 1,小数 0.6
0.6 * 2 = 1.2 --------------- 取整数 1,小数 0.2
0.2 * 2 = 0.4 --------------- 取整数 0,小数 0.4
0.4 * 2 = 0.8 --------------- 取整数 0,小数 0.8
0.8 * 2 = 1.6 --------------- 取整数 1,小数 0.6
0.6 * 2 = 1.2 --------------- 取整数 1,小数 0.2
...
最终 0.1 的二进制表示为 0.00110011... 后面将会 0011 无限循环,所以二进制无法精确的保存类似 0.1 这样的小数。
Java在double类型计算0.1+0.2=0.30000000000000004,所以在涉及到金额计算时使用BigDecimal进行计算。
BigDecimal可以设置四舍五入和保留小数位数。
金额计算也有使用long类型,可以将最小单位设置为分,例如9999=99.99元。
- 感谢你赐予我前进的力量
赞赏者名单
因为你们的支持让我意识到写文章的价值🙏
本文是原创文章,采用 CC BY-NC-ND 4.0 协议,完整转载请注明来自 爱吃鸡蛋的果果
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果