2.7 给我 true ?-6ren"> 2.7 给我 true ?-这个问题已经有答案了: Is floating point math broken? (33 个回答) 已关闭 8 年前。 为什么Float.valueOf("2.7") > 2.7给我真实的吗? -6ren">
gpt4 book ai didi

java - 为什么 Float.valueOf ("2.7") > 2.7 给我 true ?

转载 作者:行者123 更新时间:2023-12-02 03:35:42 25 4
gpt4 key购买 nike

为什么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);
}

打印

true
false
true.

如果我这样做Float.valueOf("2.7") > Float.valueOf("2.7") ,它返回 false。

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

最佳答案

文字 2.7 是一个 double - 即最接近 2.7 的 double 值。

Float.valueOf("2.7") - 或 2.7f,等效地,是最接近 2.7 的 float 值。它们都不会正好是 2.7 - 在本例中,它们都略大于 2.7。实际值是:

float:  2.7000000476837158203125
double: 2.70000000000000017763568394002504646778106689453125

正如您所见,float 值实际上大于double 值。

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

float:  2.7999999523162841796875
double: 2.79999999999999982236431605997495353221893310546875

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

System.out.println(Float.valueOf("2.7") > 2.7f);
System.out.println(Double.valueOf("2.7") > 2.7);

关于java - 为什么 Float.valueOf ("2.7") > 2.7 给我 true ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28670228/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com