En Java, je veux convertir un double en entier, je sais que si vous faites cela:
double x = 1.5;
int y = (int)x;
vous obtenez y = 1. Si tu fais ça:
int y = (int)Math.round(x);
Vous obtiendrez probablement probablement 2. Cependant, étant donné que les doubles représentations d'entiers ressemblent parfois à 1.9999999998 ou à quelque chose du genre, existe-t-il une possibilité que le casting d'un double créé via Math.round () donne toujours un nombre inférieur tronqué, plutôt que que le nombre arrondi que nous recherchons (c'est-à-dire: 1 au lieu de 2 dans le code tel que représenté)?
(et oui, je le pense comme tel: y at-il une valeur quelconque pour x, où y affichera un résultat qui est un résultat tronqué plutôt que arrondi représentation de x?)
Si c'est le cas: Existe-t-il un meilleur moyen de transformer un double en un entier arrondi sans courir le risque de troncature?
Quelque chose a figuré: 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.
est-il possible que le casting d'un double créé via
Math.round()
entraîne toujours un numéro abrégé tronqué
Non, round()
arrondira toujours votre double à la valeur correcte, puis sera converti en un long
qui tronquera les décimales. Mais après avoir arrondi, il ne restera plus aucune fraction.
Voici la documentation de Math.round(double)
:
Renvoie le plus long long de l'argument. Le résultat est arrondi à un entier en ajoutant 1/2, en prenant la parole pour le résultat et en convertissant le résultat en type long. En d'autres termes, le résultat est égal à la valeur de l'expression:
(long)Math.floor(a + 0.5d)
Pour le type de données Double
à int
, vous pouvez utiliser les éléments suivants:
Double double = 5.00;
int integer = double.intValue();
Double perValue = 96.57;
int roundVal= (int) Math.round(perValue);
Résolu mon but.