En Java, je veux convertir un double en entier, je sais si vous faites ceci:
double x = 1.5;
int y = (int)x;
vous obtenez y = 1. Si tu fais ça:
int y = (int)Math.round(x);
Vous en obtiendrez probablement 2. Cependant, je me demande: puisque les doubles représentations d'entiers ressemblent parfois à 1,9999999998 ou quelque chose du genre, y a-t-il une possibilité que le casting d'un double créé via Math.round () aboutisse toujours à un nombre tronqué, plutôt que le nombre arrondi recherché (ie: 1 au lieu de 2 dans le code comme représenté)?
(et oui, je le pense en tant que tel: y a-t-il une valeur pour x, où y affichera un résultat qui est une représentation tronquée plutôt qu'une représentation arrondie de x?)
Si c'est le cas: existe-t-il une meilleure façon de transformer un double en un entier arrondi sans courir le risque de troncature?
Compris quelque chose: Math.round (x) renvoie un long, pas un double. Par conséquent: il est impossible pour Math.round () de renvoyer un nombre ressemblant à 3.9999998. Par conséquent, int (Math.round ()) n'aura jamais besoin de tronquer quoi que ce soit et fonctionnera toujours.
Réponses:
Non,
round()
arrondira toujours votre double à la valeur correcte, puis il sera converti en unlong
qui tronquera toutes les décimales. Mais après arrondi, il ne restera plus aucune fraction.Voici les documents de
Math.round(double)
:la source
[max double: 1.7976931348623157E308]
à int qui est beaucoup plus petit[max int: 2147483647]
. Juste quelque chose à garder à l'esprit.Pour le type
Double
de données toint
, vous pouvez utiliser les éléments suivants:la source
J'ai résolu mon objectif.
la source