convertir un double en entier en java

En Java, je veux convertir un double en un entier, je sais si vous le faites :

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 2. Cependant, je me demande : étant donné que les représentations doubles des entiers ressemblent parfois à 1,9999999998 ou quelque chose comme ça, y a-t-il une possibilité que le moulage d'un double créé via Math.round() donne toujours un nombre tronqué, plutôt que le nombre arrondi que nous recherchons (c'est-à-dire : 1 au lieu de 2 dans le code représenté) ?

(et oui, je le pense vraiment) : Existe-t-il une valeur pour x, où y montrera un résultat qui est une représentation tronquée plutôt qu'arrondie de x) ?

Si oui : existe-t-il un meilleur moyen de transformer un double en un int arrondi sans courir le risque de troncature ?


J'ai trouvé quelque chose : Math.round(x) retourne un long, pas un double. Par conséquent, il est impossible que Math.round() renvoie un nombre ressemblant à 3,9999998. Par conséquent, int(Math.round()) n'aura jamais besoin de tronquer quoi que ce soit et fonctionnera toujours.

Solution

Y a-t-il une possibilité que le moulage d'un double créé via Math.round() résulte toujours en un nombre tronqué vers le bas ?

Non, round() arrondira toujours votre double à la valeur correcte, et ensuite, il sera coulé dans un long qui tronquera toutes les décimales. Mais après l'arrondi, il n'y aura pas de parties fractionnaires restantes.

Voici la documentation de [Math.round(double)][1] :

Retourne la valeur longue la plus proche de l'argument. Le résultat est arrondi à un entier en ajoutant 1/2, en prenant le plancher du résultat, et en coulant le résultat au type long. En d'autres termes, le résultat est égal à la valeur de l'expression :

(long)Math.floor(a + 0.5d)

[1] : http://download.oracle.com/javase/6/docs/api/java/lang/Math.html#round(double)

Commentaires (3)

Pour le type de données Double vers int, vous pouvez utiliser ce qui suit :

Double double = 5.00;

int integer = double.intValue();
Commentaires (2)
Double perValue = 96.57;
int roundVal= (int) Math.round(perValue);

J'ai résolu mon problème.

Commentaires (0)