负数超出范围的Float.parseFloat返回0.0

时间:2015-03-31 18:36:28

标签: java floating-point

我们如何检查Java中浮点变量的负数超出范围?

如果我使用Float.parseFloat(" 1.4E-46"),则返回0.0而不是负无穷大。在正数较大的情况下,它会返回无限。

以下代码适用于正数,我看起来类似负数。

    Float f = Float.valueOf(Float.parseFloat(input));

    if (f.floatValue() > Float.MAX_VALUE) {
        return false;
    }

2 个答案:

答案 0 :(得分:6)

  

如果我使用Float.parseFloat(" 1.4E-46"),则返回0.0而不是负无穷大。在正数较大的情况下,它会返回无限。

数字1.4E-46 不是负数。这是一个非常小正数。

1.4E+46的反面是-1.4E+46。因此,如果您执行Float.valueOf("-1.4E+46"),您将获得-Infinity

答案 1 :(得分:4)

这不是负数;这是一个非常小的正数。这是计算机化的"科学计数法。 1.4E-46相当于1.4 x 10 -46

Float.parseFloat方法解析与Float.valueOf(String)Float.MIN_VALUE / 2相同的数字0.0

  

如果s的精确值在幅度上足够小(小于或等于MIN_VALUE / 2),则舍入为float将导致零。

Java的解析方法确定该值小于{{1}},因此返回{{1}}。