当存储通常格式为44.087585(即小数点前最多2个数字,小数点后6位)的纬度/经度时,是否需要使用bigdecimals?
当存储通常格式为44.087585(即小数点前最多2个数字,小数点后6位)的纬度/经度时,是否需要使用bigdecimals?
使用double
可以提供足够的精度,以便在6-7个小数位下实现准确到英寸级别的经纬度。在航空中,如果使用小数度,则通常至少会到第7位小数。在我们的NASA模拟中,经纬度数据是double
类型,而所有其他姿态和高度则为float
类型。换句话说,对于高度来说,第6位小数并不重要,而对于经纬度来说,第6位小数是用于亚英尺级别精度的关键。如果需要亚英尺级别的精度,则不应使用float
来表示经纬度。
您可以在Google Earth中玩耍,通过放置标记并操作最后一位小数,来看看得到的精度。
double
可以用于表示纬度/经度,而 BigDecimal
更适用于处理货币或需要更为精确的计算。
double
具有足够的精度来存储这个数。但是,在向用户显示时,请使用格式字符串,例如%.6f
,以避免输出无用数字。
BigDecimal
,在这篇帖子中有很多原因进行了解释。 话虽如此, double
或 float
应该足以存储您所需的值范围,并能够满足您的需求。 double
或 float
不会让你失望,但如果您开始以任何方式聚合值,则微小的不准确性可能会开始累加。存储为双精度浮点数的最差精度约为3纳米。
如果您想在Java中进行计算:
Math.ulp((double) 180) * 60 * 1852
3.1582203519064933E-9
如果您想使用纳米GPS控制纳米机器人在其纳米旅行中移动,建议选择BigDecimal类型。否则,float/double类型已经足够。