**未经作者允许,谢绝转载**

在java中如果涉及到数值的比较的话,尽量不要使用浮点数进行比较,浮点数因为精度问题,会造成比较的结果出现问题。

一下是使用整形进行计算

int i = 123456789;
        
int i1 = i + 1;
        
if (i == i1) {
    System.out.println("i == i1");
} else {
            
    System.out.println("i != i1");
            
    }

结果是

使用int的话会正常的得到我们想得到的结果,但是如果使用浮点型会怎么样呢

float f = 1234567831239f;
        
float f1 = f + 1;
        
if (f == f1) {
    System.out.println("f == f1");
} else {
            
    System.out.println("f != f1");
            
}

以下是结果

这并不是我们想要的结果,那么为什么会出现这样的差异呢

通过以上的debug的结果,我们可以看到在程序中虽然f1=f+1但是在实际的计算中,浮点型呈现的是科学计数法,而不是我们想要的具体的数值,由于进行了进位,导致了数值精度的丢失