我希望我的数学值在值为 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?
检查 math
和 0.8
之间的增量,看看它是否在你为程序定义的某个精度级别内,然后再中断循环。
if (Math.abs(math - 0.8) < 0.00000001) {
break;
}