我想知道为什么我会收到这个错误。(这是 Eclipse 调试的显示日志)
var
(double) 2.8
tot.getIva()
(java.lang.Double) 0.17
var+tot.get()
(double) 2.9699999999999998
我不明白为什么我没有得到简单的 2.97!
我想知道为什么我会收到这个错误。(这是 Eclipse 调试的显示日志)
var
(double) 2.8
tot.getIva()
(java.lang.Double) 0.17
var+tot.get()
(double) 2.9699999999999998
我不明白为什么我没有得到简单的 2.97!
如果您愿意2.97
,您应该使用BigDecimal
.
double
s 以二进制形式存储为分数,而不是十进制。因此3.75
,例如,仅存储为2^1 + 2^0 + 2^(-1) + 2^(-2)
.
2.8
并且0.17
不能完全表示为二进制分数,因此会有一些舍入误差。
您可能还会发现这篇文章很有帮助。
这是由于 java 中浮点类型(float 和 double)的精度。如果您需要不确定的精度,您应该尝试使用BigDecimal
而不是double
.