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.

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top