Javasは、Decimalformat:どのように拒否する"無効"入力グループ化部で"年"、小数部で"?

StackOverflow https://stackoverflow.com/questions/1680120

質問

利用の場合、以下の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

知っているロケールです。英語の""は、グループセパレーターが不要になる。がいいかもしれませんが、上記の結果をうです。当社のお客様は、かつ設定します。

どうしを無効にするこング?

いて以下の結果:

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

ありえるのか?はないと、プログラムを自分のNumberFormat?

役に立ちましたか?

解決

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

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top