请看以下两个代码:
public static void main(String... args)
{
System.out.println(0.5==0.5f);
}
Run Code Online (Sandbox Code Playgroud)
输出:true
public static void main(String... args)
{
System.out.println(0.1==0.1f);
}
Run Code Online (Sandbox Code Playgroud)
输出:false
为什么会这样?
Dav*_*era 39
您正在比较两种类型的值:double和float.考虑不精确数字的大小限制.
一个例子:
确切的值(十进制)
value1
- > 1/2,小数点后5位是0.50000
value2
- > 1/2,10位小数是0.5000000000
然后
value1 == value2
- >返回true
不精确的值(十进制)
value3
- > 1/3,5位小数是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
Voo*_*Voo 19
这与浮点数在表单中表示的事实有关c*2^q
.0.5
可以表示为1*2^-1
虽然0.1
不可能准确地表示独立于你制作c和q的大小.
将float与double进行比较时,float会被转换为double.如果表示的数字已经可以正确表示为float,则在转换为double时它将具有相同的值,但如果不是,则double将具有一些额外的有效数字,因此将比较非相等.
归档时间: |
|
查看次数: |
7828 次 |
最近记录: |