round redondear programacion hacia ejemplo arriba java double long-integer ceil

java - redondear - ¿Por qué Math.ceil devuelve un doble?



math.round java (2)

Cuando llamo a Math.ceil(5.2) el retorno es el double 6.0 . Mi inclinación natural era pensar que Math.ceil(double a) regresaría long . De la documentación:

ceil(double a)

Devuelve el valor double más pequeño (más cercano al infinito negativo) que no es menor que el argumento y es igual a un número entero matemático.

Pero ¿por qué devolver un double lugar de un long cuando el resultado es un número entero? Creo que entender la razón detrás de esto podría ayudarme a entender Java un poco mejor. También podría ayudarme a descubrir si me meteré en problemas lanzando por long , por ejemplo,

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

siempre lo que creo que debería ser? Me temo que podría haber algunos casos límites que son problemáticos.


El rango de double es mayor que el de long . Por ejemplo:

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

¿Qué esperarías de la última línea si Math.ceil regresara long ?

Tenga en cuenta que a valores muy grandes (positivos o negativos) los números terminan siendo distribuidos de forma muy dispersa, por lo que el siguiente entero mayor que el entero x no será x + 1 si ve lo que quiero decir.


Un doble puede ser más grande que Long.MAX_VALUE . Si llama a Math.ceil() en tal valor, esperaría devolver el mismo valor. Sin embargo, si devuelve un valor largo, el valor sería incorrecto.