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

2022-08-31 12:48:35

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

ceil(double a)

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

但是,当结果是整数时,为什么要返回 a 而不是 a 呢?我认为理解它背后的原因可能有助于我更好地理解Java。它也可能帮助我弄清楚,我是否会因为投掷到一个,例如doublelonglong

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

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


答案 1

的范围大于 的范围。例如:doublelong

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

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

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


答案 2

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


推荐