我不理解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输入“,” 在语言环境的错误位置应该失败)?
答案 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.
答案 1 :(得分:0)
正如javadev所提到的,解析方法似乎忽略了千位分隔符。如果你想要严格的解析,我想你必须自己实现一个解析方法(使用NumberFormat / DecimalFormat的信息)。
答案 2 :(得分:-1)
由于逗号是美国区域设置中数千的分隔符,因此在错误放置时会被忽略。 所有这些输出都将打印5500。