如何将NSDecimalNumber转换为CLLocationDegrees而不会丢失精度?

时间:2012-06-04 09:31:14

标签: iphone objective-c ios ipad

我需要将 NSDecimalNumber 转换为我需要转换为 CLLocationDegrees 的lat / lon值。我使用 - [NSDecimalNumber doubleValue] 方法。但价值失去了它的精确度。我希望价值观相同。以下是我所说的(我希望每个人都已经意识到这个问题)。

NSString *coordStr = @"-33.890934125621094";
NSDecimalNumber *lat = [NSDecimalNumber decimalNumberWithString:coordStr];
NSLog(@"%@", lat); // -33.890934125621094
NSLog(@"%lf", [lat doubleValue]); // -33.890934

我有什么方法可以做而不是做上述事情?

2 个答案:

答案 0 :(得分:3)

尝试使用doubleValue方法转换字符串

NSString *coordStr = @"-33.890934125621094";

NSLog(@"%.17g",coordStr.doubleValue); //-33.890934125621094

查看此帖子:How to print a double with full precision on iOS?

修改 文档说:typedef double CLLocationDegrees;所以你double test = coordStr.doubleValue;只能解决问题,NSLog不打印完整的值。但是,double var保存了完整的值。

答案 1 :(得分:1)

CLLocationDegree是双倍的。因此,最大精度只能等于double数据类型的精度。