我想知道为什么会收到此错误。 (这是Eclipse调试的显示日志)
var
(double) 2.8
tot.getIva()
(java.lang.Double) 0.17
var+tot.get()
(double) 2.9699999999999998
我无法理解为什么我没有简单地得到2.97!
答案 0 :(得分:12)
如果您需要2.97
,则应使用BigDecimal
。
double
被存储为二进制中的分数,而不是十进制。因此,3.75
仅存储为2^1 + 2^0 + 2^(-1) + 2^(-2)
。
2.8
和0.17
无法完全表示为二进制分数,因此会出现一些舍入错误。
您可能还会发现this article有帮助。
答案 1 :(得分:1)
这是由于java(float和double)中浮点类型的精度。如果您需要无限期精确度,请尝试使用BigDecimal
代替double
。