Gdy zadzwonię pod numer Math.ceil(5.2)
, zwracana jest wartość double
6.0
. Moją naturalną skłonnością było sądzić, że Math.ceil(double a)
zwróci long
. Z dokumentacji:Dlaczego Math.ceil zwraca double?
ceil(double a)
zwraca najmniejszą (najbliżej ujemnej nieskończoności)
double
wartość , która jest nie mniejsza niż argument i jest równa matematycznego całkowitej.
Dlaczego zamiast tego zwracamy wartość double
zamiast long
, gdy wynikiem jest liczba całkowita? Myślę, że zrozumienie przyczyny tego problemu może pomóc mi lepiej zrozumieć Javę. Pomoże mi też dowiedzieć się, czy wpadnę w kłopoty, rzucając na long
, np. jest
long b = (long)Math.ceil(a);
zawsze to, co myślę, że powinno być? Obawiam się, że mogą istnieć pewne problemy graniczne, które są problematyczne.
Zobacz http://stackoverflow.com/questions/3412449/why-does-math-round-return-a-long-but-math-floor-return-double – starblue