请看以下两段代码:
public static void main(String... args)
{
System.out.println(0.5==0.5f);
}
输出:真
public static void main(String... args)
{
System.out.println(0.1==0.1f);
}
输出:假
为什么会这样?
最佳答案
您正在比较两种类型的值:double 和 float。 考虑不精确数字的大小限制。
一个例子:
精确值(十进制)
value1
-> 5 位小数的 1/2 是 0.50000
value2
-> 1/2 后 10 位小数是 0.5000000000
然后
value1 == value2
-> 返回真
不精确的值(十进制)
value3
-> 5 位小数的 1/3 是 0.33333
value4
-> 1/3 后 10 位小数是 0.3333333333
然后
value3 == value4
-> 返回 false,因为它们不一样。
0.1 不能用二进制精确表示(如十进制的 1/3),但 0.5 可以。
0.1d
的二进制表示 -> 0.000(1100)1100110011...
0.5d
-> 0.1
关于java - 为什么 0.5==0.5f 为真而 0.1==0.1f 为假?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31357232/