一尘不染

如何在Java中比较两个double值?

java

Java中两个double值的简单比较会产生一些问题。让我们考虑以下Java中的简单代码段。

package doublecomparision;

final public class DoubleComparision 
{
    public static void main(String[] args) 
    {
        double a = 1.000001;
        double b = 0.000001;

        System.out.println("\n"+((a-b)==1.0));
    }
}

上面的代码似乎返回true,表达式的求值,((a-b)==1.0)但是没有。它false之所以返回,是因为该表达式的求值0.9999999999999999实际上是预期的1.0,1.0因此不等于,因此条件的求值为boolean false。解决这种情况的最佳建议方法是什么?


阅读 1213

收藏
2020-03-04

共1个答案

一尘不染

基本上,你不应该进行精确比较,而应该执行以下操作:

double a = 1.000001;
double b = 0.000001;
double c = a-b;
if (Math.abs(c-1.0) <= 0.000001) {...}
2020-03-04