1

GWT 2.0を使用していますが、NumberFormatを使用してDoubleをフォーマットしようとすると、期待どおりの結果が得られません。

NumberFormat format = NumberFormat.getFormat( "#.########" );
Double d = new Double("0.256281093911");
format.format(d);

フォーマットされた文字列:0.02147484

ご覧のとおり、フォーマットされた値が間違っています(これはgwtショーケースで確認できます)。これは私が使用しているカスタムフォーマット(#。########)に関連していますか?それともこれはGWTフォーマッターのバグですか?これがバグである場合、誰かが回避策を見つけましたか?ありがとう。

4

2 に答える 2

1

Double は、一般に Java ではバイナリ形式で格納されます。ほとんどの場合、2 進浮動小数点値を扱うのは、希望どおりではありません。2 進浮動小数点数と 10 進浮動小数点数を変換すると、丸め誤差が発生します。

float 値をバイナリ形式ではなく DECIMAL 形式で格納する「BigDecimal」を試してください。

サンプルコード:

NumberFormat format = NumberFormat.getFormat("#.########");
format.format(new BigDecimal("0.256281093911"));
于 2011-12-20T16:05:27.010 に答える
1

リンク テキスト NumberFormat.getDecimalFormat を試すことができます。また、ブラウザのロケールおよび/または小数点区切り文字に関係している可能性があります。

于 2010-02-04T10:25:20.250 に答える