为什么Math.ceil返回一个double?
当我调用Math.ceil(5.2)
,返回值是double
6.0
。 我的自然倾向是认为Math.ceil(double a)
会返回一个long
。 从文档:
ceil(double a)
返回不小于参数的最小(最接近负无穷大)
double
值,它等于一个math整数。
但是当结果是一个整数时为什么返回一个double
而不是long
呢? 我认为了解它背后的原因可能会帮助我更好地理解Java。 这也可能帮助我弄清楚,如果我将自己陷入困境,铸造到一个long
,例如
long b = (long)Math.ceil(a);
总是我认为应该是什么? 我担心会出现一些有问题的边界案例。
double
的范围大于long
。 例如:
double x = Long.MAX_VALUE; x = x * 1000; x = Math.ceil(x);
如果Math.ceil
返回long
你会期望最后一行做什么?
请注意,在非常大的值(正值或负值)时,数字最终会非常稀疏地分布 – 所以如果您明白我的意思,那么大于整数x
的下一个整数将不会是x + 1
。
double可以大于Long.MAX_VALUE
。 如果您在这样的值上调用Math.ceil()
,您将会返回相同的值。 但是,如果它返回一个很长的时间,价值将是不正确的。