有人可以解释一下,在java中为什么0.6 <0.6f但是0.7is> = 0.7f

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.对于floatdouble二进制而言,它是同样的东西.