Lorsque j'appelle Math.ceil(5.2)
le retour est le double
6.0
. Mon inclination naturelle était de penser que Math.ceil(double a)
retournerait un long
. De la documentation:
ceil(double a)
Renvoie la plus petite valeur (la plus proche de l'infini négatif)
double
qui n'est pas inférieure à l'argument et est égale à un entier mathématique.
Mais pourquoi renvoyer un double
plutôt qu'un long
lorsque le résultat est un entier? Je pense que comprendre la raison de cela pourrait m'aider à comprendre Java un peu mieux. Cela pourrait également m'aider à déterminer si je vais me mettre dans le pétrin en lançant un long
, par exemple est
long b = (long)Math.ceil(a);
toujours ce que je pense que ça devrait être? Je crains que certains cas limites ne posent problème.
La plage de double
est supérieure à celle de long
. Par exemple:
double x = Long.MAX_VALUE;
x = x * 1000;
x = Math.ceil(x);
Qu'attendez-vous de la dernière ligne si Math.ceil
a renvoyé long
?
Notez qu'à des valeurs très grandes (positives ou négatives) les nombres finissent par être distribués très peu - donc le prochain entier supérieur à l'entier x
ne sera pas x + 1
Si tu vois ce que je veux dire.
Un double peut être plus grand que Long.MAX_VALUE
. Si vous appelez Math.ceil()
sur une telle valeur, vous vous attendez à retourner la même valeur. Cependant, s'il renvoyait un long, la valeur serait incorrecte.