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 => 解析例外
  • 10,5 => 解析例外
  • 0,25 => 解析例外

これを行う標準的な方法はありますか?または、独自の NumberFormat をプログラムする必要がありますか?

4

1 に答える 1

3

1つの問題は、グループ化文字(英語ロケールでは「、」)です。NumberFormatインスタンスのグループ化サポートを無効にするには、setGroupingUsed(false)を呼び出すだけです。

ただし、これにより別の問題が発生します。つまり、NumberFormatは文字列の先頭から、不明な文字に到達するまで解析します。グループ化が無効になっている場合にparse( "10,50")が10を返すのと同じように、parse( "12foo")は12を返します。入力文字列全体が実際に解析されたかどうかを確認するには、ParsePosition引数を指定したparseメソッドを使用してそのインデックスを確認し、入力文字列が最後まで解析されたかどうか、またはパーサーが文字列の前の位置で停止したかどうかを確認する必要があります。

于 2009-11-05T13:51:21.290 に答える