我有以下功能,我无法更改参数的double
类型。
double latitude = coordinate.x;
double longitude = coordinate.y;
createEPoint(latitude, longitude));
vars纬度和经度有很多小数(35.94777225005756),我需要保持其精度。我知道我可以使用BigDecimal或其他类,但正如我所说,我无法修改createEPoint(double lat, double lon)
的参数。
到目前为止,当我获得EPoint的参数时,纬度和经度的值会自动舍入,您是否有任何想法可以避免这种情况并保持数字的精确度?
答案 0 :(得分:2)
最接近35.94777225005756的双精度值具有精确值35.94777225005756093878517276607453823089599609375,其Double.toString结果(默认打印输出)为35.94777225005756。
从十进制数到双精度的转换存在固有的精度损失,没有任何东西可以恢复。您必须使用BigDecimal坐标来存储和携带该点的第二个表示。
然而,在1e15中,任何物理位置都不太可能被测量到一个部分,即十进制的近似精度 - 双十进制转换。如果,如变量名所示,这是一个与圆周球面上的位置成角度为40,075千米的角度,精度损失远小于一微米。