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

时间:2011-07-19 22:27:45

标签: java double geospatial latitude-longitude bigdecimal

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

6 个答案:

答案 0 :(得分:140)

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

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

答案 1 :(得分:24)

纬度/经度

double应该没问题。一旦开始操纵货币或需要更多地控制精确度,BigDecimal就变得更加重要。

答案 2 :(得分:6)

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

答案 3 :(得分:5)

如果你担心精确度,你应该选择BigDecimal for lots of reasons covered in this post。也就是说,doublefloat 应该可以存储您需要的内容,以便能够满足您所需的值范围。

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

答案 4 :(得分:3)

如果你想使用纳米GPS控制纳米机器人的纳米机器人 - 去BigDecimal吧。否则 - 浮动/双倍就足够了。

答案 5 :(得分:2)

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

如果你想用Java计算它:

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

3.1582203519064933E-9

作为奖励;从浮子存放中获得的最差精度是1.7米。