1

次のコードをテストしようとしましたが、n で 434 が返されました。予期していなかった結果です。この精度の損失の理由は何ですか?

double f = 4.35;
int n =  (int) (100 * f); // n will be 434 - why?
n = (int) Math.round(100*f); // n will be 435
4

2 に答える 2

2

浮動小数点は、浮動小数点数を正確に表すことはできません。

印刷してみてください100 * f = 434.9999999intその double の値は434、小数部分を切り捨てたものになります。

このroundメソッドは、最も近いint数値に丸め435ます。

于 2013-10-06T22:13:49.930 に答える