【问题标题】:Float.parseFloat returns NumberFormatException that does not make senseFloat.parseFloat 返回没有意义的 NumberFormatException
【发布时间】:2015-11-10 06:21:54
【问题描述】:

好的。我知道根据 Java Docs:

parseFloat 将返回 NumberFormatException - 如果字符串不包含可解析的浮点数。

我认为 parseFloat 方法会查看第一个字符是否是数字,如果是,它将读取直到找到一个字符,然后返回该值直到但不包括该字符作为浮点数。

因此,考虑到这一点,我正在尝试执行以下操作并获得 NumberFormatException。

float value;

value = Float.parseFloat("50C");

我希望它会返回 value = 50。

有人能解释一下为什么上面的转换会返回 NumberFormatException 吗?我是否误解了 parseFloat 会做什么?

【问题讨论】:

    标签: java numberformatexception parsefloat


    【解决方案1】:

    根据 Float 上的 Java 7 文档:

    parseFloat(String s)

    返回一个新的浮点数,初始化为指定字符串表示的值,由 Float 类的 valueOf 方法执行。

    对于 valueOf 方法:

    valueOf(String s)

    返回一个浮点对象,该对象保存由参数字符串 s 表示的浮点值。

    因此,如果传递给parseFloat 方法的字符串不代表浮点字符串,您最终会得到NumberFormatException,因为它无法将其转换为浮点数。

    来源:http://docs.oracle.com/javase/7/docs/api/java/lang/Float.html

    【讨论】:

      【解决方案2】:

      问题是50C 不能被标准库解析为浮点数,因此是异常。要使其成为可解析的浮点数,您需要添加 F 或 f 之类的字符,例如 50f 或 50F。

      【讨论】:

        【解决方案3】:

        50C 不是可解析的 float,仅允许使用 fFdD

        试试:

        value = Float.parseFloat("50f");
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2019-11-26
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-10-03
          • 1970-01-01
          相关资源
          最近更新 更多