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)