Java double vs BigDecimal的纬度/经度

当存储纬度/经度的格式通常是:44.087585(即最多2点之前的数字和6dp)是否需要打扰大的?

使用double有足够的精确度,以精确的经纬度到英寸6-7小数位。 在航空方面,如果使用十进制度数,通常至less要有七位小数。 在我们的NASA模拟中,纬度/经度数据是双打的,而其他所有的姿态和高度都是浮点数。 换句话说,海拔的第六个小数位不显着,而经纬度的第六个小数位是次英尺的精度。 如果你需要精度到次脚,你不应该使用float / lat。

您可以在Google地球上玩耍,通过放置标记和操纵最后一位十进制数字来查看准确性。

纬度/经度double 。 一旦你开始操纵货币或者需要对精度进行更多的控制, BigDecimal就变得更加重要。

一个double有足够的精度来存储它。 但是,向用户显示时,请使用格式string(如%.6f以免打印垃圾数字。

如果您担心精度问题,那么您应该使用BigDecimal 来解决这篇文章中提到的很多原因 。 也就是说, doublefloat 应该可以满足你所需要的值的范围,就可以存储你所需要的东西。

精确到小数点后六位,我不认为double精度或float会使你跳动,但是如果你以任何方式开始累加数值,精度不精确度就会加起来。

如果你想使用纳米GPS控制纳米机器人的纳米行程 – 去BigDecimal。 否则 – float / double就足够了。

存储为双倍的最差的准确度约为3nm。

如果你想用Java来计算它:

 Math.ulp((double) 180) * 60 * 1852 3.1582203519064933E-9 

作为奖励; 从浮筒存放得到的最差准确度是1.7米。