77

当我调用Math.ceil(5.2)return 是double 6.0. 我的自然倾向是认为这Math.ceil(double a)会返回一个long. 从文档中:

ceil(double a)

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

但是为什么当结果是整数时返回 adouble而不是 a呢?long我认为理解它背后的原因可能有助于我更好地理解 Java。它还可以帮助我弄清楚我是否会通过转换为 a 给自己带来麻烦long,例如是

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

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

4

2 回答 2

72

的范围double大于的范围long。例如:

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

如果Math.ceil返回,您希望最后一行做long什么?

请注意,在非常大的值(正或负)下,数字最终分布得非常稀疏——所以如果你明白我的意思,下一个大于整数的整数x就不会是。x + 1

于 2011-09-02T17:28:34.163 回答
14

双精度可以大于Long.MAX_VALUE。如果您调用Math.ceil()这样的值,您会期望返回相同的值。但是,如果它返回一个 long,则该值将不正确。

于 2011-09-02T17:28:56.640 回答