5

我不明白 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 (假设在语言环境的不正确位置输入“,”应该失败)?

4

3 回答 3

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.

有关更多信息,请访问格式化数字打印输出

于 2013-04-04T10:59:44.373 回答
0

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

于 2013-04-04T11:21:08.683 回答
-1

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

于 2013-04-04T11:04:03.927 回答