当存储通常格式为44.087585(即在点之前最多2个数字和6dp)的纬度/经度时,我是否需要打扰bigdecimals?
答案 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。也就是说,double
或float
应该可以存储您需要的内容,以便能够满足您所需的值范围。
只有六位小数的精度我不认为double
或float
会让你失望,但如果你开始以任何方式聚合这些值,那么次要的不精确就会开始加起来
答案 4 :(得分:3)
如果你想使用纳米GPS控制纳米机器人的纳米机器人 - 去BigDecimal吧。否则 - 浮动/双倍就足够了。
答案 5 :(得分:2)
存储为double的最差精度约为3 nm。
如果你想用Java计算它:
Math.ulp((double) 180) * 60 * 1852
3.1582203519064933E-9
作为奖励;从浮子存放中获得的最差精度是1.7米。