Javaで倍精度浮動小数点数を整数に変換する 質問する

Javaで倍精度浮動小数点数を整数に変換する 質問する

Java で double を整数に変換したいのですが、次のようにすればいいと思います。

double x = 1.5;
int y = (int)x;

y=1 になります。次のようにすると:

int y = (int)Math.round(x);

おそらく 2 が返されるでしょう。しかし、私は疑問に思っています。整数の double 表現は 1.9999999998 などのように見えることがあるため、Math.round() で作成された double をキャストすると、探している丸められた数値 (つまり、コードで表現されている 2 ではなく 1) ではなく、切り捨てられた数値になる可能性はありますか?

(そして、私はそう言っています:どれでもx の値、y は x の丸め表現ではなく切り捨て表現の結果を表示しますか?)

もしそうなら、切り捨てのリスクを冒さずに double を丸められた int に変換するより良い方法はありますか?


何かが分かりました: Math.round(x) は double ではなく long を返します。したがって、Math.round() が 3.9999998 のような数値を返すことは不可能です。したがって、int(Math.round()) は何かを切り捨てる必要がなく、常に機能します。

ベストアンサー1

作成されたdoubleをキャストすると、Math.round()切り捨てられた数値になる可能性はありますか?

いいえ、round()double は常に正しい値に丸められ、その後、小数点以下を切り捨てる an にキャストされますlong。ただし、丸めた後、小数部分は残りません。

ドキュメントはこちらMath.round(double):

引数に最も近い long を返します。結果は、1/2 を加算し、結果の切り捨てを取り、結果を long 型にキャストすることで整数に丸められます。つまり、結果は式の値と等しくなります。

(long)Math.floor(a + 0.5d)

おすすめ記事