2016-05-04 14 views
0

Ich Hole eine Breite und Länge von einem JSON-API. Diese Werte kommen als Strings.NSString zu CLLocationDegrees zu NSString ist Wert zu verändern

speichere ich den Wert in einem CLLocationDegrees wie folgt aus:

CLLocationDegrees lat = [[coordinates objectForKey:@"lat"] doubleValue]; 
CLLocationDegrees lon = [[coordinates objectForKey:@"lat"] doubleValue]; 

Aber wenn ich die Werte aus lat und lon später abrufen und sie in einem NSString hat sich der Wert geändert, was durch die JSON zur Verfügung gestellt wurde . Die Veränderung ist in der Regel nur die letzten Ziffern der Koordinate, aber es ist genug, um ein Problem zu verursachen.

NSString *latitude = [[NSNumber numberWithDouble:lat] stringValue]; 
NSString *longitude = [[NSNumber numberWithDouble:lon] stringValue]; 

Im Grunde an dieser Stelle ist zu [coordinates objectForKey:@"lat"]latitude nicht gleich.

Irgendwelche Tipps, wie Sie dieses Problem beheben würde

Antwort

0

NSNumber stringValue Sie erkannt werden, wird eine Standard-Darstellung geben, die nur hat in der Regel 5 Dezimalstellen.

Eine Möglichkeit wäre stringWithFormat zu verwenden und ein Format zu verwenden, das die Daten, die Sie aus dem ursprünglichen JSON haben übereinstimmt.

NSString *latitude = [NSString stringWithFormat:@"%.7f", lat]; 

Passen Sie den Formatbezeichner Ihren Anforderungen an.

Denken Sie auch daran, dass der Übergang von der ursprünglichen Zeichenfolge zu einer double aufgrund der Art der Darstellung von Gleitkommazahlen zu einem gewissen Genauigkeitsverlust führen kann. Es gibt nichts, was man außer halten auf die ursprüngliche Zeichenfolge, die eine Referenz tun, wenn es so wichtig ist.

+0

Ich hätte das im Originalbeitrag sagen sollen, aber es ist nicht so, dass ich die Präzision verliere ... die Ziffern sind gleich lang, ändern sich aber. Zum Beispiel ging man von '40.78399658203125' zu' 40.7839965820328' ... die 5 am Ende zu einem 8 geändert Ist dies immer noch ein Ergebnis der gleichen Formatierung Situation? – Chris

+0

'double' ist auf etwa 15 signifikanten Stellen gut. Die Nummer '40.78399658203125' hat 16 signifikante Ziffern. Sie können also etwas Verlust erwarten. Und selbst wenn es aufgrund der Anzahl der Stellen keinen Verlust gibt, können Sie einen scheinbaren Verlust aufgrund der Unfähigkeit sehen, alle möglichen Werte in einem Fließkommatyp wie "double" darzustellen. – rmaddy