2
String str="123456.7855456677";
ParsePosition parsePosition = new ParsePosition(0);
NumberFormat numberFormat=new DecimalFormat();
Number number=numberFormat.parse(str, parsePosition);

if(parsePosition.getIndex()!=str.length())
{
    throw new IllegalArgumentException();
}

numberFormat.setMaximumFractionDigits(2);
numberFormat.setRoundingMode(RoundingMode.HALF_UP);
double value=Double.parseDouble(numberFormat.format(number));
System.out.println(value);

このコード セグメントの文字列型変数の値はstr、ユーザーが任意の文字列を自由に入力できると仮定して、任意の動的な値にすることができます。

最後から 2 行目Double.parseDouble()メソッドにより、がスローされます。java.lang.NumberFormatException

行を削除し、代わりにクラスnumberFormat.setMaximumFractionDigits(2);のオーバーロードされたコンストラクターに RegEx を設定します。DecimalFormat

NumberFormat numberFormat=new DecimalFormat("#.##");

例外を抑制します。

では、それ以外の場合はなぜ機能しないのでしょうか。

4

2 に答える 2

4

コードをデバッグできる場合は、この行の出力をチェックしてnumberFormat.format(number)、例外の理由になる可能性のあるコンマを含む数値を示します。これを確認する123,456.79と、このコンマは存在しないはずです...これが役立つことを願っています.

于 2013-02-11T09:12:26.650 に答える
3

Exception in thread "main" java.lang.NumberFormatException: For input string: "123,456.79" double の数値の文字列表現内にコンマを含めることはできません。

于 2013-02-11T09:12:03.500 に答える