Java双精度和麻烦

时间:2012-05-28 14:52:46

标签: java floating-point double

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

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

我无法理解为什么我没有简单地得到2.97!

2 个答案:

答案 0 :(得分:12)

如果您需要2.97,则应使用BigDecimal

double被存储为二进制中的分数,而不是十进制。因此,3.75仅存储为2^1 + 2^0 + 2^(-1) + 2^(-2)

2.80.17无法完全表示为二进制分数,因此会出现一些舍入错误。

您可能还会发现this article有帮助。

答案 1 :(得分:1)

这是由于java(float和double)中浮点类型的精度。如果您需要无限期精确度,请尝试使用BigDecimal代替double