web-dev-qa-db-fra.com

convertir double en entier dans java

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.

107
vdMandele

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)
90
jjnguy

Pour le type de données Double à int, vous pouvez utiliser les éléments suivants:

Double double = 5.00;

int integer = double.intValue();
22
Charlie
Double perValue = 96.57;
int roundVal= (int) Math.round(perValue);

Résolu mon but.

9
Nandkishor Gokhe