为什么Float.valueOf("2.7")> 2.7给我的确如此?

ash*_*mca 2 java

为什么Float.valueOf("2.7") > 2.7给我真实?

    public static void main(String[] args) {
    System.out.println(Float.valueOf("2.7") > 2.7);
    System.out.println(Float.valueOf("2.7") > 2.8);
    System.out.println(Float.valueOf("2.7") > 2.6);
    }
Run Code Online (Sandbox Code Playgroud)

版画

true
false
true.
Run Code Online (Sandbox Code Playgroud)

如果我这样做Float.valueOf("2.7") > Float.valueOf("2.7"),它会让我失意.

任何人都可以帮助我理解这种行为吗?

Jon*_*eet 7

字面值2.7double- 即最接近double2.7的值.

Float.valueOf("2.7")- 或者2.7f,等效地,是与float2.7 最接近的值.它们都不是2.7 - 在这种情况下,它们都略大于2.7.实际值是:

float:  2.7000000476837158203125
double: 2.70000000000000017763568394002504646778106689453125
Run Code Online (Sandbox Code Playgroud)

正如你所看到的,float价值真的比更大的double价值.

如果最接近的值低于 "理想" 值,您将看到相反的效果,其中float值将小于该double值,因为该double值将更接近"理想"值.你会看到2.8,例如,值是:

float:  2.7999999523162841796875
double: 2.79999999999999982236431605997495353221893310546875
Run Code Online (Sandbox Code Playgroud)

如果您使用Double.parseDouble而不是Float.parseFloat- 或者,如果您使比较对float文字起作用,您应该得到预期的结果:

System.out.println(Float.valueOf("2.7") > 2.7f);
System.out.println(Double.valueOf("2.7") > 2.7);
Run Code Online (Sandbox Code Playgroud)