1. ホーム
  2. java

Math.ceilはなぜdoubleを返すのですか?

2023-09-27 01:38:41

質問

私が Math.ceil(5.2) を呼び出すと、返り値は double 6.0 . と考えるのが自然な流れでした。 Math.ceil(double a) を返すと思ったのです。 long . ドキュメントから。

ceil(double a)

最も小さい(負の無限大に最も近い)値を返します。 double の値 に等しく、引数より小さくない、数学的な 整数に等しい。

しかし、なぜ double ではなく long を使うのでしょうか?その理由を理解することで、Javaをもう少し理解できるかもしれないと思います。また、この理由によって long にキャストすることで問題が発生するかどうかを知るのにも役立ちます。

long b = (long)Math.ceil(a);

は、常に私が考えるべきものですか?問題となるような境界ケースがあるのではないかと心配です。

どのように解決するのですか?

の範囲は double よりも大きく long . 例えば

double x = Long.MAX_VALUE;
x = x * 1000;
x = Math.ceil(x);

最後の行は、次のような場合、どうすればいいでしょうか? Math.ceil が返された場合 long ?

非常に大きな値 (正または負) では、数値は非常にまばらに分布することになることに注意してください - したがって、整数より大きな次の整数は x よりも大きい次の整数は x + 1 にはなりません。