gpt4 book ai didi

Java double 没有小数位不能正确相乘?

转载 作者:行者123 更新时间:2023-12-01 13:00:27 27 4
gpt4 key购买 nike

我真的很抱歉问这个问题,但此时我对 Java 数学及其众多怪癖完全失去了理智。我有一个函数可以将地理经度/纬度转换为相对 X/Y 图表。 (不重要)但在测试过程中,我遇到了一个问题,即双倍乘法返回不正确的值,这应该会导致没有小数位的 double (例如 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?!

我不知道为什么这是一个问题。在某些时候,可能会自动转换为长整型或浮点型,可能是因为结果没有小数位,但应该是 double 型?

如果这是一个明显的问题,我真的很抱歉。任何建议以及任何澄清我误用的术语的编辑都将受到高度赞赏。谢谢!

请注意,我意识到 Math.round 返回一个 long。这是最新的尝试,没有舍入 Y 会产生相同的错误值。

最佳答案

这是一种科学计数法,表示 5.3326 乘以 107

所以这里的 E 代表 10,后面跟着 10 的指数。

关于Java double 没有小数位不能正确相乘?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23552649/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com