Dans l'exemple fourni, votre décimal est 8,6 . S'il avait été 8,5 ou 9,5, l'affirmation 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. Chose assez dangereuse à faire, car une perte de données pourrait survenir.
Maintenant, pour la première déclaration, deux choses peuvent arriver. Si la partie décimale est 5, c'est-à-dire qu'elle est à mi-chemin, une décision doit être prise. Arrondissons-nous vers le haut ou vers le bas? En C #, la classe Convert implémente l'arrondi du banquier. Voir cette réponse pour une explication plus approfondie. En termes simples, si le nombre est pair, arrondissez vers le bas, si le nombre est impair, arrondissez vers le haut.
Par exemple, considérez:
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
Math.Truncate(score)
est une intention plus explicitement exprimée que(int)score