Java双精度和麻烦

我想知道为什么我会收到这个错误。 (这是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以二进制forms存储为分数,而不是十进制。 因此,例如, 3.75仅存储为2^1 + 2^0 + 2^(-1) + 2^(-2)

2.80.17不能完全表示为二进制分数,因此会出现一些舍入误差。

您可能还会发现本文很有帮助。

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