为什么德语本地化的 DecimalFormat 能够成功地将“3.2”解析为 Java 中的小数?

Gre*_*gor 2 java format locale decimalformat

我希望

var decimal = DecimalFormat.getInstance(locale).parse(number);
Run Code Online (Sandbox Code Playgroud)

当区域设置为 de_DE 并且数字为“3.2”时,会产生 ParseException 作为“.” 不是此区域设置的有效分隔符。为什么是这样?区域设置的想法不是所有这些格式问题都以标准化方式处理吗?

Bas*_*que 5

句号在德语数字解析中实际上没有任何意义

正如所评论的,德语中的句号( ) 字符是千位分组标记(不是小数点分隔符)。它的使用不是语义的,没有意义。不强制执行任何有关对特定数量的数字进行分组的规则。.DecimalFormat

因此,在您的代码中,该点实际上被忽略了。the3和 the2被视为好像是32,因此解析为三十二。

示例代码。

//Locale locale = Locale.US ;      // Parses FULL STOP as a decimal separator, with 3.2 as result. 
Locale locale = Locale.GERMANY ;   // Parses FULL STOP as a digit grouping, with 32 as result.
String input = "3.2" ;
var decimal = DecimalFormat.getInstance( locale ).parse( input );
System.out.println( decimal ) ;
Run Code Online (Sandbox Code Playgroud)

请参阅在 IdeOne.com 上实时运行的代码

32