When I call Math.ceil(5.2)
the return is the double
6.0
. My natural inclination was to think that Math.ceil(double a)
would return a long
. From the documentation:
ceil(double a)
Returns the smallest (closest to negative infinity)
double
value that is not less than the argument and is equal to a mathematical integer.
But why return a double
rather than a long
when the result is an integer? I think understanding the reason behind it might help me understand Java a bit better. It also might help me figure out开发者_JAVA百科 if I'll get myself into trouble by casting to a long
, e.g. is
long b = (long)Math.ceil(a);
always what I think it should be? I fear there could be some boundary cases that are problematic.
The range of double
is greater than that of long
. For example:
double x = Long.MAX_VALUE;
x = x * 1000;
x = Math.ceil(x);
What would you expect the last line to do if Math.ceil
returned long
?
Note that at very large values (positive or negative) the numbers end up being distributed very sparsely - so the next integer greater than integer x
won't be x + 1
if you see what I mean.
A double can be larger than Long.MAX_VALUE
. If you call Math.ceil()
on such a value you would expect to return the same value. However if it returned a long, the value would be incorrect.
精彩评论