Il y a une raison.
La raison en est que la façon dont le numéro est stocké en mémoire, dans le cas du type de données double, ne permet pas une représentation exacte du nombre 3600.2. Cela ne permet pas non plus une représentation exacte du nombre 0.2.
0.2 a une représentation infinie en binaire. Si vous voulez le stocker dans la mémoire ou les registres du processeur, pour effectuer quelques calculs, un nombre proche de 0.2 avec une représentation finie est stocké à la place. Il peut ne pas être apparent si vous exécutez du code comme celui-ci.
double num = (0.2 - 0.0);
En effet, dans ce cas, tous les chiffres binaires disponibles pour représenter les nombres en deux types de données sont utilisées pour représenter la partie décimale du nombre (il n'y a que la partie décimale) et la précision est plus élevé. Si vous stockez le nombre 3600.2 dans un objet de type double, certains chiffres sont utilisés pour représenter la partie entière - 3600 et il y a moins de chiffres représentant la partie fractionnaire. La précision est plus faible et la partie fractionnaire qui est en fait stockée dans la mémoire diffère de 0.2 assez, qu'elle devient apparente après la conversion du double en chaîne
Huh, même ici. Pas votre machine. – tsilb
http://stackoverflow.com/questions/1498296/net-problem-with-subtracting-double-values –
http://stackoverflow.com/questions/753948/why-is-floating-point-arithmetic-in-c -imprecise –