当我致电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);
总是我认为它应该是什么?我担心可能会出现一些有问题的边界情况。
答案 0 :(得分:65)
double
的范围大于long
的范围。例如:
double x = Long.MAX_VALUE;
x = x * 1000;
x = Math.ceil(x);
如果Math.ceil
返回long
?
请注意,在非常大的值(正数或负数)下,数字最终会非常稀疏地分布 - 因此如果您看到我的意思,那么大于整数x
的下一个整数将不会是x + 1
答案 1 :(得分:13)
双倍可以大于Long.MAX_VALUE
。如果您在此类值上调用Math.ceil()
,则可能会返回相同的值。但是,如果它返回很长时间,则该值将不正确。