NSNumber floatvalue nicht gleich NSNumber Wert
Frage
erster Beitrag hier. ein Problem mit NSNumber des floatvalue Verfahren mit - irgendwie, es gibt eine ungenaue Zahl. Hier ist das Problem: Ich speichere eine Reihe von NSNumbers in einem Array, wie folgt aus:
NSArray *a = [NSArray arrayWithObjects:
[NSNumber numberWithFloat:0.04f],
[NSNumber numberWithFloat:0.028f],
[NSNumber numberWithFloat:0.016f],
[NSNumber numberWithFloat:0.004f],
nil];
Dann versuche ich den ersten Wert abgerufen werden (zum Beispiel): NSNumber n = (NSNumber ) [a objectAtIndex: 0]; CGFloat f = [n floatvalue];
Im Debugger n zeigt einen Wert von 0,04 (in der Zusammenfassung Spalte), aber f zeigt einen Wert von 0,0399999991. Was mache ich falsch hier?
Danke an alle.
Lösung
Sie sind nicht etwas falsch zu machen. Das ist kein Problem, speziell von NSNumber
oder CGFloat
, auch nicht. Es ist etwas sehr universell über die Gleitkommazahlen, die auf Potenzen von 2, nicht Zehnerpotenzen basiert. Sie sollten dieser endgültigen Artikel lesen oder Wikipedia-Artikel .
Der Punkt ist, die Standard-Gleitkommazahlen können nur genau eine Zahl darstellen, die eine Summe von 1/2, 1/4, 1/8, .... 1/10 nicht. So können Sie genau 0,1 unter Verwendung von Standard-Gleitkommazahlen repräsentieren nicht vollständig können.
Wenn Sie wirklich brauchen, damit umzugehen, gibt es Routinen die sich mit rationalen Brüchen oder Dezimalzahlen Gleitkommazahlen.