1、首先请看代码块,想想输出的结果是什么?
float a = 1.0f-0.9f;
float b = 0.9f-0.8f;
System.out.println("res1:"+(a==b));
float x = 0.5f-0.25f;
float y = 0.25f;
System.out.println("res2:"+(x==y));
2、输出结果
res1:false
res2:true
为什么会这样呢?
3、原因
浮点数在计算机中采用二进制科学计数法存储,因为位数有限无法精确表示有些浮点数,所以导致了精度的丢失,二进制科学计数法无法准确标识1/10,就像十进制无法准确标识1/3.
结合上面的案例:
0.9=9/10,0.8=4/5无法用二进制科学计数法准确表示,参与运算会导致精度的丢失,最后导致a==b为false
0.5=1/2,0.25=1/4,可以通过二进制科学计数法精确表示,参与运算不会导致精度丢失,所以x==y为true