Le javadoc officiel dit que Math.floor renvoie un double qui est "égal à un entier mathématique", mais pourquoi ne devrait-il pas renvoyer un int?
Réponses
Trop de publicités?C'est pour la précision. Le type de données double a une mantisse de 53 bits. Entre autres choses, cela signifie qu’un double peut représenter tout entier jusqu’à 2 ^ 53 sans perte de précision.
Si vous stockez un nombre aussi important dans un entier, vous obtiendrez un débordement. Les entiers n'ont que 32 bits.
Renvoyer le nombre entier sous forme de double est la bonne chose à faire ici car il offre une plage de nombres utile beaucoup plus large qu'un nombre entier.
D'autres ont dit le pourquoi, je vais vous dire comment faire pour arrondir correctement étant donné que vous voulez faire. Si vous allez seulement utiliser des nombres positifs, alors vous pouvez utiliser cette instruction:
int a=(int) 1.5;
Cependant, l' (int) arrondit toujours vers 0. Donc, si vous voulez faire un nombre négatif:
int a=(int) -1.5; //Equal to -1
Dans mon cas, je n'ai pas envie de le faire. J'ai utilisé le code suivant pour faire les arrondis, et il semble gérer tous les cas de bord:
private static long floor(double a)
{
return Math.round(Math.floor(a));
}
Ainsi, cette erreur et d'autres valeurs non entières peuvent correctement être répercutées dans une série de calculs.
Par exemple, si vous introduisez Pas un nombre (NaN) dans Math.floor, il le transmettra.
S'il renvoie un nombre entier, il ne peut pas transmettre ces informations ni ces erreurs, et vous risquez d'obtenir des résultats erronés d'un calcul précédent. Ils semblent corrects mais erronés après un traitement supplémentaire.