为什么 0.5==0.5f 是真的,而 0.1==0.1f 是假的?
请看以下两个代码:
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);
}
输出:假
为什么会这样?
请看以下两个代码:
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);
}
输出:假
为什么会这样?
您正在比较两种类型的值:双精度值和浮点型值。想想数字不准确的大小限制。
例如:
精确值(十进制)
value1
-> 1/2 与 5 位小数是 0.50000
-> 1/2 与 10 位小数是 0.5000000000value2
然后
value1 == value2
-> 返回 true
不精确的值(十进制)
value3
-> 1/3 与 5 位小数是 0.33333
-> 1/3 与 10 位小数是 0.333333333value4
然后
value3 == value4
->返回 false,因为它们不一样。
0.1不能完全用二进制表示(如十进制的1/3),但0.5可以。
-> 0.000(1100)的二进制表示形式1100110011...
-> 0.1 的二进制表示形式0.1d
0.5d
这与浮点数以形式表示的事实有关。 可以表示为不可能准确表示,而与使c和q有多大无关。c*2^q
0.5
1*2^-1
0.1
将浮点数与双精度型进行比较时,浮点数将转换为双精度型浮点数。如果表示的数字已经可以正确表示为浮点数,则在转换为双精度值时,它将具有相同的值,但如果不是,则双精度值将具有一些额外的有效数字,因此将比较不相等。