我希望我的数学值在值为 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.");
舍入误差是计算机中浮点运算的一个“特征”。请参阅此 article 中有关舍入误差的部分.
关于Java 比较相等的 double 值但得到错误的结果。程序永远不会结束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46861750/