Java 比较相等的双精度值,但得到错误的结果.该计划永无止境



我希望我的数学值在值为 0.8 时中断。但是程序一直在继续,我没有得到我搜索的结果。

double math = 5.0;
while (true) {
    if (math ==  0.8) {
        break;
    }
    math -= 0.2;
    System.out.println (math);
}
System.out.println ("Your math value is done.");

点精度有问题。如果您通过调试器运行代码,则计算的值可能不完全是 0.8,而是例如:0.79999999999999785

您可以尝试在条件中定义阈值,以便中断循环。下面是如何执行此操作的示例:

double math = 5.0;
double delta = 0.001;
while (true) {
    if (math > 0.8 - delta && math < 0.8 + delta)
        break;
    math -= 0.2;
    System.out.println(math);
}
System.out.println("Your math value is done.");

舍入误差是计算机中浮点运算的"特征"。请参阅本文中有关舍入误差的部分。

如果要保持精度,请使用 BigDecimal 进行计算。

另请参阅:Java:为什么我们应该在现实世界中使用BigDecimal 而不是Double?

检查 math0.8 之间的增量,看看它是否在你为程序定义的某个精度级别内,然后再中断循环。

if (Math.abs(math - 0.8) < 0.00000001) {
   break;
}

相关内容

  • 没有找到相关文章

最新更新