为什么德语本地化的DecimalFormat在Java中成功地将"3.2"解析为小数?



我希望

var decimal = DecimalFormat.getInstance(locale).parse(number);

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

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

如前所述,德语中的FULL STOP(.(字符是一个千分组标记(而不是十进制分隔符(。它的用法是而不是语义,它没有任何意义。CCD_ 2不强制执行任何关于对一定数量的数字进行分组的规则。

因此,在您的代码中,点实际上被忽略了。32被认为是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 ) ;

请在IdeOne.com上实时查看此代码。

32

即使使用不同的字符而不是.,它也会成功解析它。参见NumberFormat.parse:的JavaDoc

分析给定字符串开头的文本以生成一个数字该方法可能不会使用给定字符串的全部文本

只要输入以3开始,parse方法将始终适用于您的区域设置。(是否有地区甚至不懂阿拉伯数字?(

相关内容

  • 没有找到相关文章

最新更新