Warum gibt uitextfield.text die genaue Schwimmernummer zurück, wenn sie von einem Array abgerufen werden?

StackOverflow https://stackoverflow.com/questions/19825257

Frage

Ich habe ein Array, das textField.texteingabe speichert. Ich rufe dann den Text an anderer Stelle als Float ab. Dies scheint mir die „genaue Nummer“ aus dem Textfeld zu geben.

Beispiel a

   navtestAppDelegate *appDelegate = 
   (navtestAppDelegate *)[[UIApplication 
    sharedApplication] delegate];

NSMutableArray *storedData = 
 appDelegate.myData;

[storedData replaceObjectAtIndex: myIndex withObject: mytextfield.text];

float number = [[storedData objectAtIndex:myIndex] floatValue];

wenn mytextfield.text input is 22.8, float number kehrt zurück 22.8

jedoch,

Beispiel b

[storedData replaceObjectAtIndex: myIndex withObject: @"22.8”];

float number  = [[storedData objectAtIndex:myIndex] floatValue];

float number kehrt zurück 22.7999999

Ich verstehe nicht, warum ich die genaue Nummer in Beispiel a bekomme

War es hilfreich?

Lösung

Der Wert 22.8 kann nicht genau in binärem schwimmender Punkt dargestellt werden. Was Sie sehen, ist eine Darstellung, die auf dem Anzeigeformat basiert. Unterschiedliche Anzeigemethoden können unterschiedliche Anzeigformate verwenden. Das Anzeigen einer unterschiedlichen Anzahl von Ziffern und der Rundung bedeutet, dass sowohl 22.8 als auch 22.7999999 für die Anzahl der nach der Runden angezeigten Ziffern korrekt sind. Beachten Sie, dass 22.7999999 angezeigt wurde und nicht 22.8000000, da die nächste Ziffer 2 betrug, so dass der angezeigte Wert abgerundet wurde.

Dies ist basischabhängig, das sind Dinge, die genau in einer Zahlenbasis exakt sein können, möglicherweise nicht in einer anderen Zahlenbasis exakt sein. In diesem Fall kann 22,8 in der Dezimalzahlbasis in der Basis der Binärzahl nicht genau sein.

Dies ist der Grund, warum NSDecimal existiert und der Grund für die Geldwerte nicht verwendet wird.

Dies entspricht der Anzeige des Werts von PI in der Basis -Dezimalzahl, die Anzahl der Ziffern ist unendlich, sodass für jede Anzeige jemand entschieden hat, wie viele Ziffern zu zeigen sind. Interessanterweise kann PI genau (aber sinnvoll) in der PI -Zahlbasis dargestellt werden. :-)

Im Falle des float und double Es gibt eine begrenzte Anzahl von Ziffern, die dargestellt werden können.

Andere Tipps

Versuchen Sie es wie folgt:-

[storedData replaceObjectAtIndex: myIndex    
 withObject: [NSNumber 
 numberWithFloat:22.8]];
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top