Question

Pourquoi chaque fois que je compile et exécute le code suivant dans Visual Studio 2008:

double value1 = 10.5;
double value2 = 15.5;
int whole_number = value1 + value2;
Console::WriteLine(whole_number);

J'obtiens une valeur incorrecte de 26 alors que la réponse est 25.

Cependant, lorsque j'utilise des conversions statiques sur les doublons, la bonne réponse est donnée, à savoir 25.

Comment expliquer le mauvais résultat?

Était-ce utile?

La solution

C'est absolument vrai.

double value1 = 10.5;
double value2 = 15.5;
int whole_number = value1 + value2; // int whole_number = 26.0;
Console::WriteLine(whole_number);

Qu'attendriez-vous de la place? Le compilateur évalue d'abord le côté droit, puis convertit implicitement en int. Ainsi, 26.0 devient 26

.

Lorsque vous diffusez avant d'ajouter, vous allez ajouter 10 et 15 , ce qui donne 25 :)

Autres conseils

En fait, vous ne pouvez pas compter sur les nombres en virgule flottante pour arrondir les deux sens lors d’une conversion automatique. Si 26.0 est représenté par 26.00005, il sera arrondi à 26; s'il est représenté par 25.999995, il sera arrondi à 25. Si vous voulez être sûr, utilisez la fonction standard C round , définie dans math.h . Dire Ainsi, 26,0 devient 26 n'est pas tout à fait correct.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top