0

次の値は、精度が間違っています。特定の数値のみで観測されます。浮動表現の問題かもしれませんが、具体的な理由を知りたいです。

String m = "154572.49"; //"154,572.49";
Float f = Float.parseFloat(m);
System.out.println(f);

印刷している出力は、154572.48代わりに154572.49.

4

3 に答える 3

3

Java で入力したとおりに 10 進数を表示したい場合は、float の代わりにBigDecimalを使用します。

10 進数で終了する多くの数値 (0.1 など) は 2 進数で繰り返される数値であり、浮動小数点数は 2 進数表現として格納されるため、浮動小数点数は 10 進数では本質的に不正確です。

于 2013-02-07T11:27:24.603 に答える
1

あなたはこれを読む必要があります浮動小数点演算についてすべてのコンピュータ科学者が知っておくべきこと

無限に多くの実数を有限数のビットに圧縮するには、近似表現が必要です。無限に多くの整数がありますが、ほとんどのプログラムでは、整数計算の結果を 32 ビットで格納できます。対照的に、ビット数が固定されている場合、実数を使用したほとんどの計算では、その数のビットを使用して正確に表現できない量が生成されます。したがって、浮動小数点計算の結果は、その有限表現に適合させるために丸めなければならないことがよくあります。この丸め誤差が浮動小数点演算の特徴です。

于 2013-02-07T11:30:43.470 に答える
1

Float は、10 進数の基数 2 表現を提供します。解析するときは、ほとんど正確ではない 10 進数のバイナリ表現を解析しています。バイナリ表現から .4856 を取得する場合があります (まあ、私は計算を行っていないので、アイデアを得るための推測にすぎません)。

于 2013-02-07T11:30:59.193 に答える