1

使用以下 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 => 解析异常
  • 0,25 => ParseException

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

4

1 回答 1

3

一个问题是分组字符(英语语言环境中的“,”)。要禁用对 NumberFormat 实例的分组支持,您可以简单地调用 setGroupingUsed(false)。

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

于 2009-11-05T13:51:21.290 回答