回答:
同じJavadocによると:
引数が、NaN
または無限大、正のゼロ、または負のゼロの場合、結果は引数と同じになります。でそれを行うことはできませんint
。
最大double
値は最大値よりも大きいint
ため、でなければなりませんlong
。
精度のためです。doubleデータ型には、53ビットの仮数があります。特に、doubleは、精度を失うことなく、2 ^ 53までの全体を表すことができます。
このような大きな数を整数に格納すると、オーバーフローが発生します。整数は32ビットのみです。
整数をdoubleとして返すことは、整数よりもはるかに広い有用な数値範囲を提供するため、ここで行うのが適切です。
他の人が理由を教えてくれたので、あなたがこれをやりたいのであれば、私は正しく丸める方法を教えます。正の数のみを使用する場合は、次のステートメントを使用できます。
int a=(int) 1.5;
ただし、(int)は常に0に丸められます。したがって、負の数を実行する場合は、次のようにします。
int a=(int) -1.5; //Equal to -1
私の場合、これを実行したくありませんでした。次のコードを使用して丸めを行いましたが、すべてのエッジケースを適切に処理しているようです。
private static long floor(double a)
{
return (int) Math.floor(a);
}
(int) Math.floor(a)
ですか?それはおそらくより効率的で、より短いです。
(int) Math.floor(a)
単にと書くことができます(int) a
。