如何在不丢失精度的情况下使用double作为函数参数?

时间:2017-10-10 15:26:37

标签: java double precision latitude-longitude

我有以下功能,我无法更改参数的double类型。

double latitude = coordinate.x;
double longitude = coordinate.y;
createEPoint(latitude, longitude));

vars纬度和经度有很多小数(35.94777225005756),我需要保持其精度。我知道我可以使用BigDecimal或其他类,但正如我所说,我无法修改createEPoint(double lat, double lon)的参数。

到目前为止,当我获得EPoint的参数时,纬度和经度的值会自动舍入,您是否有任何想法可以避免这种情况并保持数字的精确度?

1 个答案:

答案 0 :(得分:2)

最接近35.94777225005756的双精度值具有精确值35.94777225005756093878517276607453823089599609375,其Double.toString结果(默认打印输出)为35.94777225005756。

从十进制数到双精度的转换存在固有的精度损失,没有任何东西可以恢复。您必须使用BigDecimal坐标来存储和携带该点的第二个表示。

然而,在1e15中,任何物理位置都不太可能被测量到一个部分,即十进制的近似精度 - 双十进制转换。如果,如变量名所示,这是一个与圆周球面上的位置成角度为40,075千米的角度,精​​度损失远小于一微米。