在iOS Core Data中存储高精度纬度/经度数

Bry*_*yan 8 iphone core-location ios

我正在尝试将纬度/经度存储在核心数据中.这些最终可达到6-20位精度.

无论出于何种原因,我将它们作为Core Data中的浮点数,将它们四舍五入,而不是给我准确的值.我试过"十进制"类型,也没有运气.

NSStrings是我唯一的另一种选择吗?

编辑

NSManagedObject:

@interface Event :  NSManagedObject  
{
}

@property (nonatomic, retain) NSDecimalNumber * dec;
@property (nonatomic, retain) NSDate * timeStamp;
@property (nonatomic, retain) NSNumber * flo;
@property (nonatomic, retain) NSNumber * doub;
Run Code Online (Sandbox Code Playgroud)

这是我存储到核心数据中的样本编号的代码:

NSNumber *n = [NSDecimalNumber decimalNumberWithString:@"-97.12345678901234567890123456789"];
Run Code Online (Sandbox Code Playgroud)

以上值打印.甜蜜,我期待的价值:

Printing description of n:

-97.12345678901234567890123456789
Run Code Online (Sandbox Code Playgroud)

再次访问它的代码:

NSNumber *n = [managedObject valueForKey:@"dec"];
NSNumber *f = [managedObject valueForKey:@"flo"];
NSNumber *d = [managedObject valueForKey:@"doub"];
Run Code Online (Sandbox Code Playgroud)

印刷值:

Printing description of n:
    -97.1234567890124

    Printing description of f:
    <CFNumber 0x603f250 [0xfef3e0]>{value = -97.12345678901235146441, type = kCFNumberFloat64Type}

    Printing description of d:
    <CFNumber 0x6040310 [0xfef3e0]>{value = -97.12345678901235146441, type = kCFNumberFloat64Type}
Run Code Online (Sandbox Code Playgroud)

Eva*_*ski 10

你使用过NSNumber包装器吗?

将商店配置为使用NSNumber而不是float或decimal,并使用它来保存坐标:

[NSNumber numberWithDouble:coordinate.latitude]
//Same for longitude.
Run Code Online (Sandbox Code Playgroud)