我真的很抱歉提出这个问题,但是我现在完全不了解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);
}
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的原因,这可能是因为结果没有小数位,应该是双精度吗?
如果这是一个明显的问题,我真的很抱歉。任何建议都将不胜感激,任何澄清我滥用的术语的编辑也将受到赞赏。谢谢!
请注意,我意识到Math.round返回long。这是最新的尝试,没有舍入Y会产生相同的错误值。
最佳答案
这是一种科学计数法,表示5.3326乘以107。
因此,E在这里代表10,然后是10的指数。
关于java - Java double 数没有小数位数不能正确乘法吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23552649/