Question

Première publication ici. Un problème avec la méthode floatValue de NSNumber - d'une certaine manière, il renvoie un nombre imprécis. Voici le problème: je stocke un tas de NSNumbers dans un tableau, comme ceci:

NSArray *a = [NSArray arrayWithObjects:
    [NSNumber numberWithFloat:0.04f],
    [NSNumber numberWithFloat:0.028f], 
    [NSNumber numberWithFloat:0.016f],
    [NSNumber numberWithFloat:0.004f],
   nil];

Alors je tente de récupérer la première valeur (par exemple): NSNumber n = (NSNumber ) [a objectAtIndex: 0]; CGFloat f = [n floatValue];

Dans le débogueur, n présente une valeur de 0,04 (dans la colonne de synthèse), mais f présente une valeur de 0,0399999991. Qu'est-ce que je fais mal ici?

Merci tout le monde.

Était-ce utile?

La solution

Vous n'êtes pas mal faire quoi que ce soit. Ce n'est pas un problème spécifique de NSNumber ou CGFloat, que ce soit. Ce quelque chose de très universel sur les nombres à virgule flottante, qui est basé sur des puissances de 2, pas de pouvoirs de dix. Vous devriez lire cet article définitif ou article de Wikipedia .

Le fait est que les nombres à virgule flottante normalisés ne peuvent représenter avec précision un nombre qui est une somme de 1/2, 1/4, 1/8, .... 1/10 n'est pas. Donc, vous ne pouvez pas représenter complètement avec précision 0,1 en utilisant des nombres à virgule flottante standard.

Si vous avez vraiment besoin d'y faire face, il y a des routines qui traitent avec des fractions rationnelles ou nombres à virgule flottante décimaux.

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