4

私はフロートを持っています

float data = 24931192;

1000で割ると

data = data / 1000;

24931.191 が返ってきます。誰でも理由を教えてもらえますか? どうすればそれを防ぐことができますか?ありがとうございました

4

4 に答える 4

5

浮動小数点数/浮動小数点数の精度は非常に高く (正確には Java では 23 ビットの精度)、その精度が十分でないという問題に遭遇しました。float では不十分な場合は double を使用してみてください。ただし、最終的には問題が発生します。

于 2013-08-07T04:12:23.817 に答える
1

浮動小数点データ型には無限の精度がないため、このような小さな癖が見られます。1 つのオプション (実際に float の結果が必要な場合) は、倍精度で演算を実行してから float にキャストすることです。もう 1 つのオプションは、float ではなく BigDecimal などを使用することです。

于 2013-08-07T04:13:26.573 に答える
1

浮動小数点値 (floatおよびdouble) は近似値です。丸め誤差が発生する場合があり、実際には一部の値を正確に表すことは不可能です。考えてみてください1/3 = 0.333333...: 最終的に数字のストレージ スロットがなくなり、最終的に `(1/3) * 3 = 0.999999..." になります。

ほとんどの用途では、以上を必要とするほど正確な回答は必要ありませんdouble。もしそうなら、BigDecimalもっと遅い を見てください。

于 2013-08-07T04:13:27.550 に答える