为何选择Float.valueOf(" 2.7")> 2.7给我真实吗?

时间:2015-02-23 09:13:01

标签: 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);
    }

打印

true
false
true.

如果我Float.valueOf("2.7") > Float.valueOf("2.7"),则返回false。

有人能帮我理解这种行为吗?

4 个答案:

答案 0 :(得分:7)

文字2.7double - 即最接近double的值为2.7。

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

float:  2.7000000476837158203125
double: 2.70000000000000017763568394002504646778106689453125

如您所见,float 的值大于double值。

如果最接近的值而不是"理想的"一,您将看到相反的效果,其中float值将小于double值,因为double值将更接近"理想& #34;一。例如,您将看到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);

答案 1 :(得分:1)

2.7是双字面的。 Float.valueOf("2.7")float,因此精度较低,这意味着它可以通过高于2.7的双近似值的浮点值近似。

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

会给你错误,因为你会比较两个花车。

答案 2 :(得分:0)

这是因为2.7f> 2.7d float 2.7代表double略高于float代表,因为{{1}}不太准确。

答案 3 :(得分:0)

这是由于双精度和浮点数的精确度使得浮点数略高一倍。

您可以尝试使用以下代码。

    System.out.println("double: " + new BigDecimal(2.7));
    System.out.println("float: " + new BigDecimal(Float.valueOf("2.7")));
    System.out.println("double: " + new BigDecimal(2.7d));
    System.out.println("float: " + new BigDecimal(2.7f));
  • 2.7是双
  • Float.valueOf(“2.7”)是一个浮动
  • 2.7d是双
  • 2.7f是一个浮动