Java DecimalFormat:如何拒绝带有分组小数的“无效”输入?

时间:2009-11-05 12:02:43

标签: java grouping number-formatting

使用以下NumberFormat时:

    NumberFormat amountFormat = NumberFormat
        .getNumberInstance(I18N.getThreadLocale());
    amountFormat.setMaximumFractionDigits(2);
    amountFormat.setMinimumFractionDigits(2);

通过

解析时,我得到以下结果
    System.out.println(amountFormat.parse(value));
  • 10,50 => 1050
  • 10,5 => 105
  • 0,25 => 25

我知道在Locale.ENGLISH中,“,”是组分隔符。但我不认为上述结果是有道理的。我们的客户对这种格式感到不满。

如何禁用此分组?

我希望得到以下结果:

  • 10,50 => ParseException的
  • 10,5 => ParseException的
  • 0,25 => ParseException的

有没有标准的方法来做到这一点?或者我是否必须编写自己的NumberFormat?

1 个答案:

答案 0 :(得分:3)

一个问题是分组字符(英语语言环境中的',')。要禁用NumberFormat实例的分组支持,只需调用setGroupingUsed(false)即可。

然而,这会导致一个不同的问题,即NumberFormat从字符串的开头解析,直到它到达一个未知字符。如果禁用分组,解析(“12foo”)将返回12,就像解析(“10,50”)将返回10一样。要检查整个输入字符串是否实际已被解析,您必须使用带有ParsePosition参数的parse方法并检查其索引以及输入字符串是否已解析到结尾,或者解析器是否停留在字符串中的较早位置。 / p>