double
vous rapproche, mais vous ne pouvez pas représenter 1/10 exactement en binaire (en utilisant la notation en virgule flottante IEEE, de toute façon).
Si vous êtes vraiment intéressé, vous pouvez regarder What Every Computer Scientist Should Know About Floating-Point Arithmetic. Lien honteusement volé d'un autre thread SO. L'explication rapide et sale est que le flottant est stocké en binaire avec des bits qui représentent des puissances fractionnelles de 2 (1/2, 1/4, 1/8, ...). Il n'y a tout simplement pas de méthode mathématique pour additionner ces fractions à exactement 1/10, donc 0,1 ne peut pas être représenté exactement en notation flottante IEEE.
double
étend la précision du nombre en vous donnant plus de chiffres avant/après la base, mais il ne change pas le format du binaire d'une manière qui peut compenser cela. Vous aurez juste le bit supplémentaire quelque part plus tard sur la ligne, le plus probable.
Voir aussi:
et d'autres sujets similaires.
Poursuite de l'expansion que je ruminais sur le chemin du retour du travail: une façon que vous pourriez peut gérer cela est simplement en représentant toutes les valeurs monétaires en cents (comme int), puis conversion en dollars. cents lors de l'affichage des données. Ceci est en fait assez facile, aussi, puisque vous pouvez profiter de la troncature de division entière lors de la conversion:
int interest, dollars, cents;
interest = 16034; //$160.34, in cents
dollars = value/100; //The 34 gets truncated: dollars == 160
cents = value % 100; //cents == 34
printf("Interest earned to date: $%d.%d\n", dollars, cents);
Je ne sais pas Objective-C, mais nous espérons que cet exemple C est logique aussi. Encore une fois, c'est juste une façon de le gérer. Il serait également amélioré en ayant une fonction qui fait le formatage de chaîne chaque fois que vous avez besoin d'afficher les données.
Vous pouvez évidemment trouver votre propre moyen (encore mieux!) De le faire, mais peut-être que cela vous aidera à démarrer. Si quelqu'un d'autre a des suggestions sur celui-ci, j'aimerais les entendre aussi!
voir ma réponse http://stackoverflow.com/questions/14155360/convert-to-float-and-calculate/14155699#14155699 peut-être cela aidera un peu :) – TheTiger