我真的很抱歉提出这个问题,但是我现在完全不了解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/

10-11 23:10
查看更多