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
doublemá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.