2016-07-06 40 views
0

以下例程预计将返回,但它将返回0.9999999999999999如何避免计算错误与原语

double sum = 0; 
for(int i=0; i<10; i++){ 
    sum+=0.1; 
} 
System.out.println(sum); 

其他java数学运算也会发生同样的错误。

有什么办法可以避免这个问题吗?

预先感谢您。

+0

这不是一个错误。这是浮点运算的本质。 – meskobalazs

+1

浮点运算本质上不准确。你可以用'''BigDecimal''尝试,但速度要慢很多。 –

+0

我想你可以围绕它,如果你只需要整数 – Zac

回答

1

这就是所谓的浮点错误。这很自然,也是值得期待的。避免它的方法是使用更高精度的变量,如BigDecimal。然而,BigDecimal执行计算较慢,所以请考虑在您的解决方案中准确性的重要性。

如果这些数量代表货币,我会推荐使用BigDecimal,尽管有任何性能命中。在这种情况下,更重要的是你的计算是正确的。