在iOS核心数据中存储高精度的纬度/经度数字
我正在尝试将纬度/经度存储在核心数据中。 这些结果是从6-20位精度的任何地方。
无论出于何种原因,我把它们作为Core Data的花车,将它们四舍五入,而不是给我确切的数值。 我试过“小数”types,没有运气。
NSStrings是我唯一的select吗?
编辑
NSManagedObject:
@interface Event : NSManagedObject { } @property (nonatomic, retain) NSDecimalNumber * dec; @property (nonatomic, retain) NSDate * timeStamp; @property (nonatomic, retain) NSNumber * flo; @property (nonatomic, retain) NSNumber * doub;
以下是存储在核心数据中的样本编号的代码:
NSNumber *n = [NSDecimalNumber decimalNumberWithString:@"-97.12345678901234567890123456789"];
上面的值打印出来。 甜,我期望的价值:
Printing description of n: -97.12345678901234567890123456789
代码再次访问它:
NSNumber *n = [managedObject valueForKey:@"dec"]; NSNumber *f = [managedObject valueForKey:@"flo"]; NSNumber *d = [managedObject valueForKey:@"doub"];
打印值:
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}
你有没有使用NSNumber包装?
configuration您的商店使用NSNumber,而不是浮点数或小数点,并使用它来保存坐标:
[NSNumber numberWithDouble:coordinate.latitude] //Same for longitude.
尝试在Core Data中使用Double数据types。 由于您的位置坐标是双倍的,因此在Core Data中使用相同的坐标是有意义的。 虽然可能刚刚可用(iOS 5)。
当Core Data将数据存储在SQLite中时,它使用数字列。 SQLite将数字存储为 – 最多8个字节的值,无论是整数还是浮点数。 所以,尽pipeNSDecimalNumber
会很高兴准确地表示这些坐标值,但是通过由SQLite支持的Core Data十进制属性将它们四舍五入将使它们陷入困境。
由于坐标范围是明确定义的,所以可以通过使用64位int表示(甚至是多个)来添加精确度的几个数字(与double相比)。
在现实中,你的来源和目标可能不会使用或提供这么多的准确性,所以…可能没有太大的收获。
我相信截断问题可能在日志上,而不是存储在Core Data中的实际数据。
你可以通过发布你正在使用的代码来确认输出吗?
我之所以这么说,是因为我注意到,当logging一些较长的NSString字段时,Core Data描述将只显示大约50个字符,这可能会导致您认为它正在截断数据,但实际上只是截断了它。
在您的数据模型编辑器中,确保纬度/长度字段的types设置为double
。 否则CoreData会为你做转换,结果将不是你所期望的(在这种情况下,小数点将被丢弃)。
强烈build议使用NSDecialNumber进行存储,如果您需要精确的值或比较你的代码。 在存储之后,您可能会得到不同的值,并从双核字段的核心数据中获取价值。
- 与CLGeocoder重复地理编码后,kCLErrorDomain错误2
- CLGeocoder reverseGeocodeLocation返回“kCLErrorDomain错误9”
- iOS CLLocationManager在一个单独的类
- 如何从当前位置find最近的经纬度?
- CLLocation提示显示并在一瞬间消失
- 无法在MKMapView上设置缩放级别
- 当飞行模式打开时,CLLocationManager如何获取一个位置
- CLLocationManager geo-fencing / startMonitoringForRegion:vs. startMonitoringForSignificantLocationChanges:与10分钟的startUpdating调用
- iOSfind平均速度