public class testBasicTypeCompare {
public static void main(String[] args) {
double c = 0.8;
double d = 0.7;
double e = 0.6;
float a = 0.125f;
double b = 0.125d;
System.out.println((a - b) == 0.0);
System.out.println(c - d == d - e);
}
}
运行结果:
true
false
Process finished with exit code 0
解释:
1.
System.out.println((a - b) == 0.0); //true
首先浮点数是由符号位、指数位、有效数字三个部分组成,而0.125f、0.125d已经精确的将精度表达出来了,不存在精度丢失,因而a-b==0.0。
类似十进制里面的分数1/3,即是无限循环数,无法精确表示出来;
同理浮点数里有些数值也没法精确表示出来,因为精度并没有指定。
System.out.println(0.8-0.7);//输出0.10000000000000009
System.out.println(0.7-0.6);//输出0.09999999999999998