Java double vs BigDecimal的纬度/经度
当存储纬度/经度的格式通常是:44.087585(即最多2点之前的数字和6dp)是否需要打扰大的?
使用double有足够的精确度,以精确的经纬度到英寸6-7小数位。 在航空方面,如果使用十进制度数,通常至less要有七位小数。 在我们的NASA模拟中,纬度/经度数据是双打的,而其他所有的姿态和高度都是浮点数。 换句话说,海拔的第六个小数位不显着,而经纬度的第六个小数位是次英尺的精度。 如果你需要精度到次脚,你不应该使用float / lat。
您可以在Google地球上玩耍,通过放置标记和操纵最后一位十进制数字来查看准确性。
纬度/经度double
。 一旦你开始操纵货币或者需要对精度进行更多的控制, BigDecimal
就变得更加重要。
一个double
有足够的精度来存储它。 但是,向用户显示时,请使用格式string(如%.6f
以免打印垃圾数字。
如果您担心精度问题,那么您应该使用BigDecimal
来解决这篇文章中提到的很多原因 。 也就是说, double
或float
应该可以满足你所需要的值的范围,就可以存储你所需要的东西。
精确到小数点后六位,我不认为double
精度或float
会使你跳动,但是如果你以任何方式开始累加数值,精度不精确度就会加起来。
如果你想使用纳米GPS控制纳米机器人的纳米行程 – 去BigDecimal。 否则 – float / double就足够了。
存储为双倍的最差的准确度约为3nm。
如果你想用Java来计算它:
Math.ulp((double) 180) * 60 * 1852 3.1582203519064933E-9
作为奖励; 从浮筒存放得到的最差准确度是1.7米。