NumberFormat.parse() 不适用于 FRANCE Locale space 作为千位分隔符
NumberFormat.parse() does not work for FRANCE Locale space as thousand seperator
我在下面写了 Java 代码来查看区域设置如何处理数字。我正面临法国风格。
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
如您所见,space 用作法语语言环境的千位分隔符。但是,当我尝试生成数字“123 451,23”时,它无法将 space 识别为千位分隔符。
这是预期的行为吗?
编辑:
作为解决方法,我将 space 替换为“.”。所以数字变成了 GERMANY 格式。然后使用该语言环境对其进行转换。
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
这是旧 JDK 中的一个已知问题。升级它,否则你会 issue
我在下面写了 Java 代码来查看区域设置如何处理数字。我正面临法国风格。
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
如您所见,space 用作法语语言环境的千位分隔符。但是,当我尝试生成数字“123 451,23”时,它无法将 space 识别为千位分隔符。
这是预期的行为吗?
编辑: 作为解决方法,我将 space 替换为“.”。所以数字变成了 GERMANY 格式。然后使用该语言环境对其进行转换。
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
这是旧 JDK 中的一个已知问题。升级它,否则你会 issue