为什么Math.ceil返回双精度?

时间:2011-09-02 17:26:18

标签: java double long-integer ceil

当我致电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);

总是我认为它应该是什么?我担心可能会出现一些有问题的边界情况。

2 个答案:

答案 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(),则可能会返回相同的值。但是,如果它返回很长时间,则该值将不正确。