标签:取值 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。
标签:取值 sdn 示例 浮点数 png chm for 长度 等于
原文地址:https://www.cnblogs.com/gaopengpy/p/14488985.html