输入字符串的NumberFormatException:" 15,7"

时间:2016-12-18 22:23:15

标签: java locale numberformatexception decimalformat

我在尝试解析诸如&#​​34; 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));

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

2 个答案:

答案 0 :(得分:3)

我认为你混合format()parse()方法。

public final String format(double number) 

将参数作为参数并返回String。

public Number parse(String source) throws ParseException 

将String作为参数并返回一个数字。

在您的情况下,您具有特定区域设置格式的String,并且您想要检索数值。因此,您应该使用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);
}

答案 1 :(得分:0)

试试这个或其变体:

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

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