Java比较相等的double值但得到错误的结果。该计划永远不会结束

时间:2017-10-21 09:10:57

标签: java compiler-errors compare double equals

我希望我的数学值在值为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.");

3 个答案:

答案 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)

检查math0.8之间的差异,看看它是否在您打开循环之前为您的程序定义的某个精度级别。

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