我希望我的数学值在值为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 :(得分:1)
浮点精度有问题。如果你通过调试器运行代码,那么计算出的值可能不是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.");
舍入错误是一个&#34;功能&#34;计算机中的浮点运算请参阅此article中有关舍入错误的部分。
答案 1 :(得分:1)
如果要保持精度,请使用BigDecimal进行计算。
另见: Java:Why should we use BigDecimal instead of Double in the real world?
答案 2 :(得分:0)
检查math
和0.8
之间的差异,看看它是否在您打开循环之前为您的程序定义的某个精度级别。
if (Math.abs(math - 0.8) < 0.00000001) {
break;
}