对于纬度/经度,Java double vs BigDecimal

DD.*_*DD. 57 java double geospatial bigdecimal latitude-longitude

当存储通常格式为44.087585(即在点之前最多2个数字和6dp)的纬度/经度时,我是否需要打扰bigdecimals?

Tre*_*eyA 146

使用double具有足够的精度,可以精确地将纬度/经度降至英寸,小数点后6-7位.在航空中,如果使用十进制度数,它们通常至少达到7位小数.在我们的NASA模拟中,纬度/经度数据是双倍的,而所有其他态度和高度都是浮点数.换句话说,高度的第6个小数位不重要,而纬度/经度的第6个小数位用于子脚精度.如果你需要精确到亚英尺,你不应该使用float作为lat/lon.

您可以在Google地球中玩游戏,通过放置标记和操纵最后一个十进制数字来查看获得的准确度.

  • +1表示对于逻辑/纬度的小数点精度的良好解释. (4认同)

Coo*_*ans 26

double纬度/经度应该没问题.BigDecimal一旦开始操纵货币或需要更多地控制精度,这一点就变得更加重要.

  • Downvoter:为什么投票失败?随意发表评论 - 它会让你看起来合情合理. (7认同)

Gus*_*soh 7

存储为 double 的最差精度约为 3 nm。

如果你想用 Java 计算它:

Math.ulp((double) 180) * 60 * 1852

3.1582203519064933E-9
Run Code Online (Sandbox Code Playgroud)

作为奖励;存储在浮点数中时获得的最差精度是 1.7 米。


Dan*_*olo 6

如果你担心精确度,你可能会BigDecimal 因为这篇文章中涉及的很多原因而放弃.也就是说,double或者float 应该很好地存储您需要的东西,以满足您所需的价值范围.

只有六位小数的精度,我不认为doublefloat将绊倒你,但如果你开始以任何方式聚合这些值,那么次要的不精确就会开始加起来.


Chr*_*ung 6

A double具有足够的精度来存储它.但是,在向用户显示时,请使用格式字符串,%.6f以便不打印垃圾数字.