我很遗憾地问这个问题但是我现在完全失去了对Java数学的思考以及它的众多怪癖。我有一个从地理经度/纬度转换为相对X / Y图的函数。 (不重要)但是在测试过程中我遇到了一个问题,即双倍乘法会产生一个没有小数位的双精度(例如100.0),它会返回一个不正确的值。
这是我最近的尝试:
double DEGREE_DISTANCE_AT_EQUATOR = 111329;
double E6 = Double.valueOf(1E6);
double lng1 = 44.34648;
double lat1 = -76.888694;
double lng2 = 44.346356;
double lat2 = -76.888215;
xyFromLongLat(lng1, lat1, lng2, lat2);
public static Pair<Double, Double> xyFromLongLat(double long0, double lat0, double long1, double lat1) {
double x = Math.round(((long1 - long0) * longitudeDistanceAtLatitude(lat0)) * E6);
double y = Math.round(((lat1 - lat0) * DEGREE_DISTANCE_AT_EQUATOR) * E6);
return new Pair<Double, Double>(x, y);
}
Double y导致5.3326591E7?例如(-76.888694 - -76.888215)= -0.000479 * 111329.0 = -53.326591 * 1000000.0应该等于-53326591。
相反,它等于:5.332659099984012E7
(lat1 - lat0) * DEGREE_DISTANCE_AT_EQUATOR
(-76.888694 - -76.888215) * 111329.0 = -53.326591 <- This is correct
((lat1 - lat0) * DEGREE_DISTANCE_AT_EQUATOR) * E6
((-76.888694 - -76.888215) * 111329.0) * 1000000.0 = 5.332659099984012E7 <- What is this?!
我不知道为什么这是一个问题。在某些时候,可能会有一些自动转换为long或float,因为结果没有小数位但是应该是double?
如果这是一个明显的问题,我真的很抱歉。任何建议都非常受欢迎,因为任何编辑都澄清了我滥用的任何术语。谢谢!
请注意,我意识到Math.round会返回一个长整数。这是最新的尝试,没有舍入Y产生相同的错误值。
答案 0 :(得分:1)
这是科学记数法,意味着5.3326乘以10 7 。
所以E在这里代表10,然后是10的指数。