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

Pen*_*One 73 java double ceil long-integer

当我打电话Math.ceil(5.2)给退货的时候double 6.0.我的自然倾向是认为Math.ceil(double a)会回归long.从文档:

ceil(double a)

返回double不小于参数且等于数学整数的最小(最接近负无穷大)值.

但是为什么当结果是整数时返回a double而不是a long?我认为理解它背后的原因可能会帮助我更好地理解Java.它也可以帮助我弄清楚我是否会因为施放到自己而陷入困境long,例如是

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

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

Jon*_*eet 68

范围double大于long.例如:

double x = Long.MAX_VALUE;
x = x * 1000;
x = Math.ceil(x);
Run Code Online (Sandbox Code Playgroud)

如果Math.ceil返回,你会期望最后一行做long什么?

请注意,在非常大的值(正数或负数)下,数字最终会非常稀疏地分布 - 因此,如果您看到我的意思,那么下一个大于整数的整数x将不会出现x + 1.

  • 但那么为什么`round`会返回一个`long`? (6认同)
  • 示例:`2 ^ 60`可以表示为double,而`2 ^ 60(+/-)1`则不能 (2认同)

Pet*_*rey 13

双倍可以大于Long.MAX_VALUE.如果你调用Math.ceil()这样的值,你会期望返回相同的值.但是如果它返回很长时间,则该值将是不正确的.