我看到人们使用的两种变体...... 只是不知道浮动还不够iOS5?
答案 0 :(得分:21)
32位浮点数保持7位精度,64位双精度位数保持15位精度。
精确到7位数,最大经度179.9999只能精确到0.0001度。学位约为60海里,因此0.0001度约为10米(33英尺)。如果要存储更精确的lat / lon值,则需要使用double(或固定点整数)。
答案 1 :(得分:4)
这些天并不重要。
double只是一个浮点值槽,其精度可以是标准浮点数的两倍。除非你强制它使用浮点数,否则Objective-c编译器实际上会将所有浮点值存储为double。
从记忆过于紧张的旧时代开始,漂浮和双打基本上都处于停滞状态。现在,在字符串格式化方面,您通常只看到它们不同。各种大小的int都是一样的。除非您强制编译器执行其他操作,否则所有大小都以最大可用大小存储。答案 2 :(得分:2)
为了回答使用浮点数或双倍时的精确度,我得出了这个答案:
存储为E / W和N / S的十进制数时的最差情况准确度:
您可以通过在Java中运行它来自行完成计算:
public class Main {
public static void main(String[] args) {
System.out.println(Math.ulp((float) 180) * 60 * 1852);
System.out.println(Math.ulp((double) 180) * 60 * 1852);
}
}
我知道这是一个老线程但我在搜索问题时找到了它。对于大多数应用程序来说,Float最有可能足够有问题的Apple设备的GPS可能没有更好的准确性。但只要数据不是问题,就更容易存储双打。
答案 3 :(得分:2)
最近,我认为在可转换属性中将核心数据中的坐标存储为NSValue
更容易:
[NSValue valueWithMKCoordinate:coordinate]