我在尝试解析诸如" 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));
然而,这是抛出异常的地方,因为逗号被用作小数点。我错过了什么吗?谢谢!
答案 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);
编辑:更正根据其他人的解答进行解析!