Java NumberFormat忽略美国语言环境中的逗号?

时间:2013-04-04 10:57:23

标签: java localization locale number-formatting

我不理解NumberFormat中的某些内容,在美国语言环境中,它假设将逗号(“,”)视为组分隔符 - 数千个。

为什么在此区域设置的错误位置忽略逗号?

NumberFormat format = DecimalFormat.getInstance(Locale.US); 
System.out.println(format.parse("5,500").longValue()); //5500
System.out.println(format.parse("550,0").longValue()); //5500
System.out.println(format.parse("5500,").longValue()); //5500

任何其他想法如何根据区域设置解析String到Long(asumming输入“,” 在语言环境的错误位置应该失败)?

3 个答案:

答案 0 :(得分:0)

逗号是分组分隔符的占位符,句点是小数分隔符的占位符。

NumberFormat format = DecimalFormat.getInstance(Locale.US); 
System.out.println(format.parse("5.500").longValue()); //5
System.out.println(format.parse("55.00").longValue()); //55
System.out.println(format.parse("550.0").longValue()); //550

从演示文稿中忽略逗号。用于数千的合同很常见,但在解析过程中没有任何表示。这就是为什么它被称为分组分隔符而不是千位分隔符。您可以使用类似5,5.0,0,的内容,但它仍然有效。

数字的分组方式可能有所不同,有时它是3位数,有时是2位或组合。

从逻辑上讲,如果它只是用于简化人类阅读的分隔符。他的位置不会改变所呈现数字的值,因此可以省略。


Oracle实施的对类java.text.DecimalFormat的分析表明,分组字符会被忽略。

1526  // Ignore grouping characters, if we are using them, but
1527  // require that they be followed by a digit.  Otherwise
1528  // we backup and reprocess them.

更多访问Formatting Numeric Print Output

答案 1 :(得分:0)

正如javadev所提到的,解析方法似乎忽略了千位分隔符。如果你想要严格的解析,我想你必须自己实现一个解析方法(使用NumberFormat / DecimalFormat的信息)。

答案 2 :(得分:-1)

由于逗号是美国区域设置中数千的分隔符,因此在错误放置时会被忽略。 所有这些输出都将打印5500。