码迷,mamicode.com
首页 > 其他好文 > 详细

为什么金额计算必须用BigDecimal?

时间:2021-03-06 14:45:55      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:取值   sdn   示例   浮点数   png   chm   for   长度   等于   

金额计算不能用doube!!!!

金额计算必须用BigDecimal,下面对比一下用double 跟BigDecimal的区别。先看一个小例子:

请看题:

技术图片

示例1

问, 结果是多少? 0.01?

No! 结果是0.009999999999999998!

为什么会这样呢? 因为float和double都是浮点数,都有取值范围,都有精度范围。 浮点数与通常使用的小数不同,使用中,往往难以确定。

常见的问题是定义了一个浮点数,经过一系列的计算,它本来应该等于某个确定值,但实际上并不是!

double相减会转换成二进制,因double有效位数为16位这就会出现存储小数位数不够的情况,小数的二进制有时并不能精确表示。

这种情况下就会出现误差,解决方法就是使用BigDecimal,它的有效长度足够长可存储小数位数。

因此可代替double来进行加减乘除,金额必须是完全精确的计算,故不能使用double或者float,而应该采用java.math.BigDecimal。

为什么金额计算必须用BigDecimal?

标签:取值   sdn   示例   浮点数   png   chm   for   长度   等于   

原文地址:https://www.cnblogs.com/gaopengpy/p/14488985.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!