NumberFormat.parse()不适用于FRANCE Locale space作为千位分隔符

时间:2015-11-02 13:17:36

标签: locale number-formatting

我在下面编写了Java代码,以了解locales如何处理数字。我面对FRENCH风格。

double n = 123456789.123;
System.out.println("US              "+ NumberFormat.getNumberInstance(Locale.US).format(n));    //###,###.###
System.out.println("FRENCH          "+ NumberFormat.getNumberInstance(Locale.FRENCH).format(n)); // # ###,##
System.out.println("GERMAN          "+ NumberFormat.getNumberInstance(Locale.GERMAN).format(n)); // ###.###,##

System.out.println(NumberFormat.getNumberInstance(Locale.US).parse("123,451.23"));
System.out.println(NumberFormat.getNumberInstance(Locale.GERMANY).parse("123.451,23"));
System.out.println(NumberFormat.getNumberInstance(Locale.FRANCE).parse("123 451,23"));

输出

US              123,456,789.123
FRENCH          123 456 789,123
GERMAN          123.456.789,123
123451.23
123451.23
123

如您所见,空格用作FRENCH区域设置的千位分隔符。但是当我试图生成数字“123 451,23”时,它不会将空间识别为千位分隔符。

这是预期的行为吗?

修改 作为一种解决方法,我用“。”替换了空格。所以号码成为德国格式。然后使用该语言环境进行转换。

input = input.replace(" ", ".");
// Now "123 451,23" is "123.451,23" So which is same as german
System.out.println(NumberFormat.getNumberInstance(Locale.GERMANY).parse(input));

输出

123451.23

1 个答案:

答案 0 :(得分:1)

这是旧JDK中的已知问题。升级它或您将issue