首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在iOS核心数据中存储高精度的经纬度数字

在iOS核心数据中存储高精度的经纬度数字
EN

Stack Overflow用户
提问于 2011-01-03 14:39:12
回答 7查看 7.3K关注 0票数 8

我试着把纬度/经度存储在核心数据中。这些数字的精度在6-20位之间。

不管出于什么原因,我把它们作为浮动在核心数据中,它使它们四舍五入,而不给我确切的值。我试过“十进制”类型,也没有运气。

NSStrings是我唯一的选择吗?

编辑

NSManagedObject:

代码语言:javascript
复制
@interface Event :  NSManagedObject  
{
}

@property (nonatomic, retain) NSDecimalNumber * dec;
@property (nonatomic, retain) NSDate * timeStamp;
@property (nonatomic, retain) NSNumber * flo;
@property (nonatomic, retain) NSNumber * doub;

下面是我存储到核心数据中的一个示例编号的代码:

代码语言:javascript
复制
NSNumber *n = [NSDecimalNumber decimalNumberWithString:@"-97.12345678901234567890123456789"];

上面打印的值。甜蜜,我期待的价值:

代码语言:javascript
复制
Printing description of n:

-97.12345678901234567890123456789

再次访问它的代码:

代码语言:javascript
复制
NSNumber *n = [managedObject valueForKey:@"dec"];
NSNumber *f = [managedObject valueForKey:@"flo"];
NSNumber *d = [managedObject valueForKey:@"doub"];

印刷价值:

代码语言:javascript
复制
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}
EN

回答 7

Stack Overflow用户

发布于 2011-01-03 14:47:06

你用过NSNumber包装器吗?

将您的存储配置为使用NSNumber,而不是浮点数或十进制,并使用它保存坐标:

代码语言:javascript
复制
[NSNumber numberWithDouble:coordinate.latitude]
//Same for longitude.
票数 10
EN

Stack Overflow用户

发布于 2012-03-09 02:54:35

尝试在Core数据中使用双重数据类型。因为您的位置坐标是双倍的,所以在Core数据中使用相同的坐标是有意义的。虽然现在还可以使用(iOS 5)。

票数 1
EN

Stack Overflow用户

发布于 2013-02-02 06:18:12

当核心数据在SQLite中存储数据时,它使用数字列。SQLite存储数字 as-最多是8字节值,无论是整数还是浮点数.因此,虽然NSDecimalNumber很乐意准确地表示这些坐标值,但通过SQLite支持的核心数据十进制属性进行往返操作将对它们进行处理。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4585331

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档