私はフロートを持っています
float data = 24931192;
1000で割ると
data = data / 1000;
24931.191 が返ってきます。誰でも理由を教えてもらえますか? どうすればそれを防ぐことができますか?ありがとうございました
私はフロートを持っています
float data = 24931192;
1000で割ると
data = data / 1000;
24931.191 が返ってきます。誰でも理由を教えてもらえますか? どうすればそれを防ぐことができますか?ありがとうございました
浮動小数点数/浮動小数点数の精度は非常に高く (正確には Java では 23 ビットの精度)、その精度が十分でないという問題に遭遇しました。float では不十分な場合は double を使用してみてください。ただし、最終的には問題が発生します。
浮動小数点データ型には無限の精度がないため、このような小さな癖が見られます。1 つのオプション (実際に float の結果が必要な場合) は、倍精度で演算を実行してから float にキャストすることです。もう 1 つのオプションは、float ではなく BigDecimal などを使用することです。
浮動小数点値 (float
およびdouble
) は近似値です。丸め誤差が発生する場合があり、実際には一部の値を正確に表すことは不可能です。考えてみてください1/3 = 0.333333...
: 最終的に数字のストレージ スロットがなくなり、最終的に `(1/3) * 3 = 0.999999..." になります。
ほとんどの用途では、以上を必要とするほど正確な回答は必要ありませんdouble
。もしそうなら、BigDecimal
もっと遅い を見てください。