2

我想知道为什么我会收到这个错误。(这是 Eclipse 调试的显示日志)

var
     (double) 2.8
tot.getIva()
     (java.lang.Double) 0.17
var+tot.get()
     (double) 2.9699999999999998

我不明白为什么我没有得到简单的 2.97!

4

2 回答 2

14

如果您愿意2.97,您应该使用BigDecimal.

doubles 以二进制形式存储为分数,而不是十进制。因此3.75,例如,仅存储为2^1 + 2^0 + 2^(-1) + 2^(-2).

2.8并且0.17不能完全表示为二进制分数,因此会有一些舍入误差。

您可能还会发现这篇文章很有帮助。

于 2012-05-28T14:55:16.990 回答
2

这是由于 java 中浮点类型(float 和 double)的精度。如果您需要不确定的精度,您应该尝试使用BigDecimal而不是double.

于 2012-05-28T14:55:27.193 回答