【发布时间】:2011-07-19 22:27:45
【问题描述】:
当存储通常采用以下格式的纬度/经度时:44.087585(即点前最多 2 个数字和 6dp)我需要使用大小数吗?
【问题讨论】:
-
与问题无关,但经度值的范围从 -180 到 180,因此点前有 3 个数字。还有一个潜在的减号:P
标签: java double geospatial latitude-longitude bigdecimal
当存储通常采用以下格式的纬度/经度时:44.087585(即点前最多 2 个数字和 6dp)我需要使用大小数吗?
【问题讨论】:
标签: java double geospatial latitude-longitude bigdecimal
使用double 具有足够的精度,可以将纬度/经度精确到小数点后 6-7 位的英寸。在航空领域,如果使用十进制度,它们通常至少保留 7 个小数位。在我们的 NASA 模拟中,纬度/经度数据是doubles,而所有其他姿态和高度都是浮动的。换句话说,高度的第 6 位小数并不重要,而 lat/lon 的第 6 位是亚英尺精度。如果您需要精确到亚英尺,则不应使用 float 表示纬度/经度。
您可以在 Google 地球中四处游荡,通过放置标记和操作最后一位小数来查看您获得的准确度。
【讨论】:
double 对于纬度/经度应该没问题。 BigDecimal 一旦您开始操纵货币或需要对精度有更多控制权,就会变得更加重要。
【讨论】:
double 具有足够的精度来存储它。但是,在向用户显示时,请使用%.6f 之类的格式字符串,这样您就不会打印出垃圾数字。
【讨论】:
如果您关心精度,您可能应该选择BigDecimal for lots of reasons covered in this post。也就是说,double 或 float 应该可以很好地存储您需要的内容,以便能够满足您需要的值范围。
我认为 double 或 float 不会让您失望,但如果您开始以任何方式汇总这些值,那么细微的不精确性就会开始累加。
【讨论】:
存储为 double 的最差精度约为 3 nm。
如果你想用 Java 计算它:
Math.ulp((double) 180) * 60 * 1852
3.1582203519064933E-9
作为奖励;存储在花车中的最差精度是 1.7 米。
【讨论】:
如果您想使用纳米 GPS 控制纳米机器人的纳米旅行,请选择 BigDecimal。否则 - float/double 就足够了。
【讨论】: