如何在不损失精度的情况下使用 double 作为函数参数?
How can I use double as a function parameters without losing precision?
我有以下功能,我不能改变参数的double
类型
double latitude = coordinate.x;
double longitude = coordinate.y;
createEPoint(latitude, longitude));
纬度和经度变量有很多小数点(35.94777225005756),我需要保持它的精度。我知道我可以使用 BigDecimal 或其他 类 但正如我所说我无法修改 createEPoint(double lat, double lon)
.
的参数
现在当我获取 EPoint 的参数时,纬度和经度的值会自动四舍五入,你有什么想法可以避免这种情况并保持数字的精度吗?
最接近 35.94777225005756 的双精度值具有精确值 35.94777225005756093878517276607453823089599609375,其 Double.toString 结果(默认打印输出)为 35.94777225005756。
从十进制数到双精度数的转换存在固有的精度损失,没有什么可以恢复。您必须使用 BigDecimal 坐标存储并携带该点的第二个表示形式。
但是,任何物理位置都不太可能被测量到 1e15 中的一个部分,即十进制 - 双精度 - 十进制转换的近似精度。如果如变量名所示,这是与圆周 40,075 公里的球体上某个位置的角度(以度为单位),则精度损失远小于微米。
我有以下功能,我不能改变参数的double
类型
double latitude = coordinate.x;
double longitude = coordinate.y;
createEPoint(latitude, longitude));
纬度和经度变量有很多小数点(35.94777225005756),我需要保持它的精度。我知道我可以使用 BigDecimal 或其他 类 但正如我所说我无法修改 createEPoint(double lat, double lon)
.
现在当我获取 EPoint 的参数时,纬度和经度的值会自动四舍五入,你有什么想法可以避免这种情况并保持数字的精度吗?
最接近 35.94777225005756 的双精度值具有精确值 35.94777225005756093878517276607453823089599609375,其 Double.toString 结果(默认打印输出)为 35.94777225005756。
从十进制数到双精度数的转换存在固有的精度损失,没有什么可以恢复。您必须使用 BigDecimal 坐标存储并携带该点的第二个表示形式。
但是,任何物理位置都不太可能被测量到 1e15 中的一个部分,即十进制 - 双精度 - 十进制转换的近似精度。如果如变量名所示,这是与圆周 40,075 公里的球体上某个位置的角度(以度为单位),则精度损失远小于微米。