如何避免原语的计算错误
How to avoid calculation mistakes with primitives
下面的例程应该是 return 1,但它 returns 0.9999999999999999。
double sum = 0;
for(int i=0; i<10; i++){
sum+=0.1;
}
System.out.println(sum);
其他 java 数学运算也会出现同样的错误。
有什么办法可以避免这个问题吗?
提前致谢。
这就是所谓的浮点错误。这是自然的,也是意料之中的。避免它的方法是使用精度更高的变量,例如BigDecimal
。但是 BigDecimal
执行计算速度较慢,因此请考虑准确性在您的解决方案中的重要性。
如果这些数量代表货币,我建议使用 BigDecimal
,尽管性能会受到影响。在这种情况下,正确计算比快速计算更重要。
下面的例程应该是 return 1,但它 returns 0.9999999999999999。
double sum = 0;
for(int i=0; i<10; i++){
sum+=0.1;
}
System.out.println(sum);
其他 java 数学运算也会出现同样的错误。
有什么办法可以避免这个问题吗?
提前致谢。
这就是所谓的浮点错误。这是自然的,也是意料之中的。避免它的方法是使用精度更高的变量,例如BigDecimal
。但是 BigDecimal
执行计算速度较慢,因此请考虑准确性在您的解决方案中的重要性。
如果这些数量代表货币,我建议使用 BigDecimal
,尽管性能会受到影响。在这种情况下,正确计算比快速计算更重要。