【问题标题】:Float.parseFloat throwing numberformat exception while Float.valueOf working fineFloat.parseFloat 在 Float.valueOf 工作正常时抛出 numberformat 异常
【发布时间】:2016-10-29 10:31:39
【问题描述】:

我将 3.5 值传递给 glb_value

         float sendValueFloat = Float.valueOf(glb_value);

以上工作正常

         float sendValueFloat = Float.parseFloat(glb_value);

但上面是抛出 numberformat 异常

谁能解释一下原因

【问题讨论】:

  • 您是否使用硬编码 3.5 检查了您想要的内容以查看问题是否解决?
  • 你不能检查这两种方法的实现吗?
  • 只是问一个愚蠢的问题:你是通过 3.5 还是“3.5”? (我猜你将它作为字符串传递,或者第二种情况可能甚至无法编译)。
  • 你的代码哪里出了问题?和glb_value有关吗?

标签: java android


【解决方案1】:

这是Float.valueOf(String) 在 Java 8 中的实现:

public static Float valueOf(String s) throws NumberFormatException {
    return new Float(parseFloat(s));
}

如您所见,valueOf 调用parseFloat 来解析字符串参数。 valueOf 不可能工作,而 parseFloat 不能工作……如果您将相同的字符串传递给每个人。

因此,您必须传递不同的字符串。再看看你的证据。

如果这没有帮助,则使用调试器运行您的应用程序,设置断点并单步执行 parseFloat 调用以查看失败的原因。

【讨论】:

    【解决方案2】:

    parseFloat() 方法(https://docs.oracle.com/javase/7/docs/api/java/lang/Float.html#parseFloat(java.lang.String)) :-

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

    返回:字符串参数表示的浮点值。

    parse 方法以字符串为参数,将其转换为 Float 对象并返回。

    https://docs.oracle.com/javase/7/docs/api/java/lang/Float.html#valueOf(float)

    valueOf(float f) 和 valueOf(String s):- 而 valueOf 用于将原始数据类型 float 或字符串参数转换为包装类 Float。它以 float/string 作为输入并返回 Float 类对象。

    ParseFloat(String s) 等于 valueOf(String s) 两者都返回以字符串为输入的 Float 对象。唯一不同的是 valueOf() 方法有两个重载方法,一个采用 float,另一个采用 String。第一个用于将原始数据类型转换为包装类,而另一个等于 valueOf(String s)

    【讨论】:

      【解决方案3】:

      您要执行的操作没有错误。我认为你必须在发送到这两个函数之前调试你的glb_value

      看看下面我测试了你想要做什么,一切都很好: ideOne

      这两者之间的唯一区别是Float.parseFloat() 返回一个原始浮点数,而另一个返回一个来自 Float 类的对象。

      【讨论】:

        【解决方案4】:

        我发现这不可能,因为这两个函数都使用 FloatingDecimal.parseFloat(s);

        我建议您查看堆栈跟踪并将输入值转储为字节。也许你遇到了编码问题,或者你认为你解析的值不是你想的那样。

        这是你提到的两个功能:

        //1:
        public static float parseFloat(String s) throws NumberFormatException {
            return FloatingDecimal.parseFloat(s);
        }
        //2:
        public static Float valueOf(String s) throws NumberFormatException {
            return new Float(parseFloat(s));
        }
        

        第一个直接调用:FloatingDecimal.parseFloat(s);
        第二个有电话{ new Float(parseFloat(s)); };

        public Float(float value) {
            this.value = value;
        }
        
        public static float parseFloat(String s) throws NumberFormatException {
            return FloatingDecimal.parseFloat(s);
        }
        

        两个函数最终调用相同的FloatingDecimal.parseFloat(s);

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-05-24
          • 2021-02-21
          • 1970-01-01
          • 2018-02-11
          • 2023-03-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多