0
以下例程预计将返回,但它将返回0.9999999999999999。如何避免计算错误与原语
double sum = 0;
for(int i=0; i<10; i++){
sum+=0.1;
}
System.out.println(sum);
其他java数学运算也会发生同样的错误。
有什么办法可以避免这个问题吗?
预先感谢您。
以下例程预计将返回,但它将返回0.9999999999999999。如何避免计算错误与原语
double sum = 0;
for(int i=0; i<10; i++){
sum+=0.1;
}
System.out.println(sum);
其他java数学运算也会发生同样的错误。
有什么办法可以避免这个问题吗?
预先感谢您。
这就是所谓的浮点错误。这很自然,也是值得期待的。避免它的方法是使用更高精度的变量,如BigDecimal
。然而,BigDecimal
执行计算较慢,所以请考虑在您的解决方案中准确性的重要性。
如果这些数量代表货币,我会推荐使用BigDecimal
,尽管有任何性能命中。在这种情况下,更重要的是你的计算是正确的。
这不是一个错误。这是浮点运算的本质。 – meskobalazs
浮点运算本质上不准确。你可以用'''BigDecimal''尝试,但速度要慢很多。 –
我想你可以围绕它,如果你只需要整数 – Zac