C语言
float a=0.1;
if(a==.1)
printf("hello");
else
printf("123");
输出为123
但对于 Java
float a=0.1F;
if(a==.1)
System.out.println("hello");
else
System.out.println("123");
答案是 hello
.
为什么?
最佳答案
此处通过 ==
进行比较,首先将 float
转换为 double
,然后比较这两个值。
float real = 0.1f;
double real2 = real;
System.out.println(real2);
输出
0.10000000149011612
现在您可以看到,当您将 float
转换为 double
值 0.1
时,您将无法在此处获得确切的值。这里系统会将您的float
值转换为double
,并具有额外数据精度。
当您编写 if(a==.1)
时,这里会发生同样的事情,您的 a
将被转换为类似 0.10000000149011612
的内容,并且比与 0.1
进行比较,它已经是 double
并且具有精确值 0.1
,因此结果为 false
并且必须打印 123
而不是我确定的 hello
。
关于java - float 比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30420612/