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 long
. De la documentation:
ceil(double a)
Renvoie la plus petite valeur
double
(la plus proche de l’infini négatif) qui n’est pas inférieure à l’argument et qui est égale à un entier mathématique.
Mais pourquoi retourner un double
plutôt qu’un long
quand le résultat est un entier? Je pense que comprendre la raison derrière cela pourrait m’aider à mieux comprendre Java. Cela pourrait aussi m’aider à comprendre si je vais avoir des problèmes en jetant un long
, par exemple
long b = (long)Math.ceil(a);
toujours ce que je pense que ça devrait être? Je crains qu’il y ait des cas limites qui posent problème.
La plage du double
est supérieure à celle du long
. Par exemple:
double x = Long.MAX_VALUE; x = x * 1000; x = Math.ceil(x);
Que Math.ceil
vous de la dernière ligne à faire si Math.ceil
est revenu long
?
Notez que pour des valeurs très élevées (positives ou négatives), les nombres finissent par être dissortingbués très peu, de sorte que le prochain nombre entier supérieur à l’entier x
ne sera pas x + 1
si vous voyez 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 à renvoyer la même valeur. Cependant, si elle était longue, la valeur serait incorrecte.