繁体   English   中英

如何在不损失精度的情况下使用 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));

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

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

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

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

但是,任何物理位置都不太可能被测量到 1e15 中的一个部分,这是十进制 - 双精度 - 十进制转换的近似精度。 如果正如变量名称所暗示的那样,这是与周长为 40,075 公里的球体上某个位置的角度(以度为单位),则精度损失远小于一微米。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM