当使用以下 NumberFormat 时:
NumberFormat amountFormat = NumberFormat
.getNumberInstance(I18N.getThreadLocale());
amountFormat.setMaximumFractionDigits(2);
amountFormat.setMinimumFractionDigits(2);
解析via时得到以下结果
System.out.println(amountFormat.parse(value));
- 10,50 => 1050
- 10,5 => 105
- 0,25 => 25
我知道在 Locale.ENGLISH 中“,”是组分隔符。但我认为上述结果没有意义。我们的客户对这种格式感到很奇怪。
如何禁用此分组?
我希望得到以下结果:
- 10,50 => 解析异常
- 10,5 => 解析异常
- 0,25 => 解析异常
有标准方法可以做到这一点吗?或者我必须编写自己的 NumberFormat 吗?
最佳答案
其中一个问题是分组字符(英语语言环境中的“,”)。要禁用对 NumberFormat 实例的分组支持,您只需调用 setGroupingUsed(false) 即可。
然而,这会导致一个不同的问题,即 NumberFormat 从字符串的开头进行解析,直到到达未知字符。如果禁用分组,parse("12foo") 将返回 12,就像 parse("10,50") 将返回 10 一样。要检查整个输入字符串是否已实际解析,您必须使用带有 ParsePosition 参数的解析方法并检查其索引以及输入字符串是否已解析到末尾或者解析器是否停止在字符串中的较早位置。
关于Java 十进制格式 : how to reject "invalid" input with grouped decimals?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1680120/