0
float a= (float) 1846.4;

NumberFormat df = DecimalFormat.getInstance();
df.setMinimumFractionDigits(2);
df.setMaximumFractionDigits(2);

float b = Float.parseFloat( df.format(a));

浮動小数点の小数点以下の桁数を設定する最良の方法は何でしょうか(2013.43452または2392.2の浮動小数点値の小数点以下2桁を設定したいだけです)。今、私はEのような例外を取得していますxception in thread "main" java.lang.NumberFormatException: For input string: "1,846.40"

4

4 に答える 4

3

NFEの直接的な問題は、小数点以下の桁数ではなく、文字列内の1000個の区切り文字だと思います。文字列にa','とaの両方があり、それが気に入らない。'.'parseFloat

ただし、float値の小数点以下の桁数を修正することはできないことに注意してください。これは完全にフォーマットの問題です。具体的には、末尾0の'は浮動小数点値では意味がないため、デフォルトでは表示されません。String出力の時点で希望に応じて値をフォーマットする必要があります(たとえば、上記のように使用して表示可能に変換する場合DecimalFormat)。

于 2012-04-13T08:19:00.380 に答える
1

フォーマットと解析を機能させるには、dfもう一度使用します。

float b = df.parse( df.format(a));

しかし、それでも意味がわかりません。浮動小数点数の小数点以下の桁数を定義することはできません。1846.40は1846.4または1846.400と同じであり、後続のゼロはまったく関係ありません。

これらの数字は、たとえば文字列に数値を書き込むなどの出力があるときに機能します。しかし、それを行うための他の機能、例えば文字列フォーマットパターンがあります。

小数桁数を内部的に制限する必要がある場合BigDecimalは、スケールを設定して、それが表す小数桁数を定義できる場所を使用します。

于 2012-04-13T08:25:18.820 に答える
1

小数点以下第2位を四捨五入したいようです。

数値形式や文字列をいじくり回すのは、行きたい場所ではありません。

これを試して:

float b = Math.round(a * 100)/100.0f;
于 2012-04-13T08:24:42.310 に答える
0

フロートの小数点以下の桁数を設定するための最良の方法は何でしょうか

ありません。フロートには小数点以下の桁はありません。彼らはバイナリの場所を持っています。

BigDecimal小数点以下の桁数が必要な場合は、aまたはの結果の小数点以下の基数を使用する必要がありDecimalFormat.format()ます。

于 2012-04-13T10:04:20.380 に答える