NSString 到 CLLocationDegrees 到 NSString 正在改变值

NSString to CLLocationDegrees to NSString is changing value

我正在从 JSON API 获取纬度和经度。这些值以字符串形式出现。

我将值存储在 CLLocationDegrees 中,如下所示:

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

但是当我稍后从 latlon 中检索值并将它们放入 NSString 时,该值已与 JSON 提供的值不同.变化通常只是坐标的最后几位,但足以引起问题。

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

基本上,在这一点上,[coordinates objectForKey:@"lat"]不等于latitude

任何有关如何解决此问题的提示都将不胜感激

NSNumber stringValue 将为您提供默认表示,通常只有 5 位小数。

一个选项是使用 stringWithFormat 并使用与原始 JSON 中的数据相匹配的格式。

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

调整格式说明符以满足您的确切需求。

另外请记住,由于浮点数的表示方式的性质,从原始字符串到 double 可能会导致一些精度损失。除了在原始字符串如此重要的情况下保留对原始字符串的引用之外,您无能为力。