【问题标题】:NumberFormatException for String while parsing float解析浮点数时字符串的 NumberFormatException
【发布时间】:2016-08-24 06:13:44
【问题描述】:

这个错误可能是由于我不同的系统语言环境造成的。我使用 DOT 作为小数分隔符。

我尝试在我的应用程序启动时设置默认语言环境,但我遇到了同样的异常。

Locale.setDefault(Locale.US);

堆栈跟踪:

 Caused by: java.lang.NumberFormatException: For input string: "6,2" at
 sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:2043) at
 sun.misc.FloatingDecimal.parseFloat(FloatingDecimal.java:122)  at
 java.lang.Float.parseFloat(Float.java:451)

【问题讨论】:

  • i use DOT as decimal separator ....NumberFormatException: For input string: "6,2"。听起来有些不对劲。
  • 我很确定美国也使用点
  • 您需要设置为使用逗号而不是点的语言环境(例如德语)。但是,最好在 NumberFormatter 实例上设置它而不是设置默认语言环境(它将在应用程序范围内产生各种效果)。
  • 美国使用点?该死的..我很确定他们使用了逗号。虽然德语仍然给了我同样的例外......
  • @KevinEsche 我的计算机设置为使用点作为分隔符,但我的应用程序总是使用逗号分隔符获取浮点输入(它是一个网站解析器)。

标签: java


【解决方案1】:

您的代码似乎正在使用Float.parseFloat。这不使用任何语言环境设置。来自文档:

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

valueOf有详细的语法,包括这个:

要解释浮点值的本地化字符串表示,请使用NumberFormat 的子类。

所以基本上,您的默认语言环境在这里是无关紧要的。如果你想解析“6,2”,你应该使用 NumberFormat 和使用逗号作为小数分隔符的语言环境。

【讨论】:

  • 我得到:Cannot format given Object as a Number 这是我的方法:NumberFormat format = NumberFormat.getInstance(Locale.FRANCE); course.setCourseGrade(Float.parseFloat(format.format(courseGrade)));
  • @pror21 因此,您使用NumberFormatfloat 转换为String,然后在没有语言环境的情况下将其解析回float?这里有什么让你觉得奇怪的地方吗?
  • @pror21:你还没有解释你真正想要实现的目标。我已经解释了问题中的行为,但您上面的评论似乎与它的关系并不密切......
  • courseGrade 是一个字符串(包含“6,2”),我必须将其解析为具有正确语言环境的浮点数。
  • @pror21:是的,所以您应该使用NumberFormat 解析它,正如我在回答中所说的那样。您当前正在调用NumberFormat.format - 然后使用Float.parseFloat 重新解析结果,这也不起作用...我建议您对如何使用NumberFormat 解析字符串进行更多研究...
【解决方案2】:

我最终使用的是下面的代码:

    DecimalFormatSymbols symbols = new DecimalFormatSymbols();
    symbols.setDecimalSeparator('.');
    DecimalFormat format = new DecimalFormat("0.#");
    format.setDecimalFormatSymbols(symbols);

    try {
       course.setCourseGrade(format.parse(courseGrade).floatValue());
    } catch (ParseException e) {
       e.printStackTrace();
    }

【讨论】:

  • 非常感谢。从昨晚开始我就一直在做。你的代码对我有用。
猜你喜欢
  • 1970-01-01
  • 2015-03-15
  • 2021-06-30
  • 1970-01-01
  • 2016-08-07
  • 2013-02-27
  • 2012-06-20
  • 2014-05-28
  • 1970-01-01
相关资源
最近更新 更多