Question

J'ai un petit problème et je ne peux pas trouver une solution!

Mon code est (Ceci est seulement un exemple de code, mais mon code d'origine quelque chose comme ça):

float x = [@"2.45" floatValue];


for(int i=0; i<100; i++)
    x += 0.22;

NSLog(@"%f", x);

la sortie est 52,450001 et non 52,450000!

Je ne sais pas parce que cela arrive!

Merci pour toute aide!

~ ~ SOLVED

Merci à tout le monde! Oui, je l'ai résolu avec le type double!

Était-ce utile?

La solution

Flotteurs sont une représentation numérique avec une certaine précision. Pas toutes les valeurs peut être représentée dans ce format. Voir aussi bien.

Vous pouvez facilement penser pourquoi ce serait le cas: il y a un nombre illimité de nombre juste au intervall (1..1), mais un flotteur a un nombre limité de bits pour représenter tous les numéros (- MAXFLOAT..MAXFLOAT).

Plus bien dit: dans une représentation entière 32bit il y a un nombre dénombrable d'entiers à être représentés, mais il y a un nombre incalculable infini de valeurs réelles qui ne peuvent être pleinement représentés dans une représentation limitée de 32 ou 64 bits. Par conséquent, il est non seulement une limite à la plus haute et la plus basse valeur réelle représentable, mais aussi à la précision.

Alors, pourquoi est un nombre qui a peu de chiffres après la virgule flottante affecté? Parce que la représentation est basée sur un système binaire au lieu d'une décimale, ce qui rend les autres numéros facilement représentables puis les décimales.

Autres conseils

nombres à virgule flottante ne peuvent pas toujours être représentés facilement par des ordinateurs. Cela conduit à des inexactitudes dans certains chiffres.

Il est comme moi vous demander ce que 1/3 est en décimal. Peu importe comment vous essayez dur, tu ne vas pas être en mesure de me dire ce qu'il est parce que décimal ne peut décrire avec précision ce nombre.

Flotteurs ne peut pas décrire avec précision des nombres décimaux.

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