Convertir un double en int en C #

Dans notre code, nous avons un double que nous devons convertir en un int.

double score = 8.6; int i1 = Convert.ToInt32(score); int i2 = (int)score; 

Quelqu’un peut-il m’expliquer pourquoi i1 != i2 ?

Le résultat est que: i1 = 9 et i2 = 8 .

Parce que Convert.ToInt32 tours:

Valeur de retour: arrondie à l’entier signé 32 bits le plus proche. Si la valeur est à mi-chemin entre deux nombres entiers, le nombre pair est renvoyé; c’est-à-dire que 4,5 est converti en 4 et 5,5 est converti en 6.

… pendant que la dissortingbution tronque :

Lorsque vous convertissez une valeur double ou flottante en un type intégral, la valeur est tronquée.

Mise à jour: Voir le commentaire de Jeppe Stig Nielsen ci-dessous pour des différences supplémentaires (qui n’entrent toutefois pas en jeu si le score est un nombre réel, comme c’est le cas ici).

Le casting ignorera tout après le point décimal, donc 8.6 devient 8.

Convert.ToInt32(8.6) est le moyen le plus sûr de s’assurer que votre double est arrondi à l’entier le plus proche, dans ce cas 9.

vous pouvez contourner votre double et lancer votre liste:

 (int)Math.Round(myDouble); 

32 tours. Le moulage en int ne fait que jeter le composant non entier.

Dans l’exemple fourni, votre décimale est 8.6 . Si cela avait été 8.5 ou 9.5, la déclaration i1 == i2 aurait pu être vraie. En fait, cela aurait été vrai pour 8,5 et faux pour 9,5.

Explication:

Indépendamment de la partie décimale, la deuxième instruction, int i2 = (int)score , supprimera la partie décimale et vous renverra simplement la partie entière. Une chose très dangereuse à faire, car des pertes de données pourraient se produire.

Maintenant, pour la première déclaration, deux choses peuvent se produire. Si la partie décimale est 5, c’est-à-dire à mi-chemin, une décision doit être prise. Est-ce que nous arrondissons ou descendons? En C #, la classe Convert met en oeuvre l’arrondissement des banquiers. Voir cette réponse pour une explication plus approfondie. Autrement dit, si le nombre est pair, arrondissez au chiffre inférieur si le nombre est impair.

Par exemple:

  double score = 8.5; int i1 = Convert.ToInt32(score); // 8 int i2 = (int)score; // 8 score += 1; i1 = Convert.ToInt32(score); // 10 i2 = (int)score; // 9