1 java
有人可以在java中解释我为什么
if(0.6 <= 0.6f ) System.out.printf("true");
else System.out.printf("false");
Run Code Online (Sandbox Code Playgroud)
这个PRINTS是真的但是
if(0.7 <= 0.7f ) System.out.printf("true");
else System.out.printf("false");
Run Code Online (Sandbox Code Playgroud)
这个PRINTS是假的
当浮点数转换为双倍进行比较时,它是否与IEEE 754标准有关?
有人可以详细解释它的确切工作吗?
Jon*_*eet 14
当然-它只是一个理解事情是没有的0.6,0.6f,0.7和0.7F是那些精确值.它们是相应类型中最接近的可表示近似值.为这4个值存储的确切值是:
0.6f => 0.60000002384185791015625
0.6 => 0.59999999999999997779553950749686919152736663818359375
0.7f => 0.699999988079071044921875
0.7 => 0.6999999999999999555910790149937383830547332763671875
Run Code Online (Sandbox Code Playgroud)
有了这些信息,您就可以清楚地了解为什么会得到您的结果.
换句话说,想象一下,你有两个十进制浮点类型,一个有4位精度,一个有8位精度.现在让我们来看看如何表示1/3和2/3:
1/3, 4dp => 0.3333
1/3, 8dp => 0.33333333
2/3, 4dp => 0.6667
2/3, 8dp => 0.66666667
Run Code Online (Sandbox Code Playgroud)
因此,在这种情况下,较低精度的值小于1/3的较高精度值,但是相反的是2/3.对于float和double二进制而言,它是同样的东西.
| 归档时间: |
|
| 查看次数: |
1410 次 |
| 最近记录: |