【问题标题】:NumberFormatException for input string: "15,7" [duplicate]输入字符串的 NumberFormatException:“15,7” [重复]
【发布时间】:2017-05-03 23:15:39
【问题描述】:

尝试解析诸如“15,7”之类的数字时出现 NumberFormatException。这将是美国或英国格式的“15.7”。 我尝试从 PC 中检索语言环境并基于此进行解析,如下所示:

if (strCountry.equals("IT")) {
    locale = java.util.Locale.ITALIAN;
} else {
    locale = java.util.Locale.ENGLISH;
}

NumberFormat m_nf = NumberFormat.getInstance(locale);
m_nf.setMaximumFractionDigits(1);

通过日志记录,我确认系统返回“IT”作为国家。然后像这样尝试解析:

Double nCount = new Double(m_nf.format(total_ff));

但是,这是引发异常的地方,因为逗号被用作小数点。我错过了什么吗?谢谢!

【问题讨论】:

  • 尝试查看浮点数变量。
  • @MadeInDreams 用双精度代替浮点数?
  • 这取决于你想用它做什么。但是,是的,您应该使用浮动。要查看 javascript 是否看到了类似的值,您始终可以使用 typeof。它将返回它被解释为的数字类型。
  • 他没有在任何地方提到jqvascript,他正在使用java

标签: java locale numberformatexception decimalformat


【解决方案1】:

我认为您将 format()parse() 方法混合使用。

public final String format(double number) 

接受一个数字作为参数并返回一个字符串。

public Number parse(String source) throws ParseException 

接受一个字符串作为参数并返回一个数字。

在您的情况下,您有一个特定语言环境格式的字符串,并且您想要检索数值。所以你应该使用parse() 而不是format()

这是一个例子:

public static void main(String[] args) throws ParseException {
  Locale locale = java.util.Locale.ITALIAN;
  String valueString = "15,7";
  NumberFormat m_nf = NumberFormat.getInstance(locale);
  m_nf.setMaximumFractionDigits(1);
  Double number = (Double) m_nf.parse(valueString);
}

【讨论】:

  • 如果我把它们混在一起,我不会收到编译时错误吗?我的示例中的变量 (total_ff) 的类型为 Double。对为什么它说它是异常中的字符串感到困惑......
  • 因为这是两个不同的东西。引发的异常与parse() 方法调用无关。问题发生在 Double 构造函数调用中:Double nCount = new Double("15,7"); 引发异常。 Double nCount = new Double("15.7"); 有效。我说你混合是因为你将Double 格式化为特定区域设置格式的String,并且你使用这个String 来实例化Double。你不应该这样做,因为Double 构造函数独立于Locale。另外,只是一个建议:下次您应该发布所有必需的代码。它有助于理解。
【解决方案2】:

试试这个或其变体:

DecimalFormatSymbols symbols = DecimalFormatSymbols.getInstance(locale);
DecimalFormat format = new DecimalFormat("#.0", symbols);
Double nCount = (Double) format.parse(total_ff);

编辑:更正为根据其他人的答案进行解析!

【讨论】:

    猜你喜欢
    • 2011-05-23
    • 2017-08-24
    • 2020-06-21
    • 2021-03-20
    • 1970-01-01
    • 2019-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多