Alv*_*vin 5 java floating-point numbers
任何人都可以请我为什么以下程序的输出不是"不同的"?
public static void main(String[] args)
{
float f1=3.2f;
float f2=6.5f;
if(f1==3.2)
System.out.println("same");
else
System.out.println("different");
if(f2==6.5)
System.out.println("same");
else
System.out.println("different");
}
Run Code Online (Sandbox Code Playgroud)
o/p:不同的
fre*_*low 11
6.5具有有限二进制表示:110.1
具有至少4个有效位的任何浮动类型都可以完美地表示该数字.
110.100000000000000000000(float)
= 6.5
110.10000000000000000000000000000000000000000000000000(double)
= 6.5
3.2另一方面有无限二进制表示:101.0011001100110011 ...
float和double没有无限精度因此只能近似这个数字:(
101.001100110011001100110(float)
= 3.2000000476837158203125
101.00110011001100110011001100110011001100110011001101(double)
= 3.20000000000000017763568394002504646778106689453125
你可以清楚地看到,这些数字是不一样的!
| 归档时间: |
|
| 查看次数: |
3718 次 |
| 最近记录: |