Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/395.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java与Javascript计算结果的差异_Java_Javascript_Math_Floating Point_Operator Precedence - Fatal编程技术网

Java与Javascript计算结果的差异

Java与Javascript计算结果的差异,java,javascript,math,floating-point,operator-precedence,Java,Javascript,Math,Floating Point,Operator Precedence,我试图用Java实现一个JS函数。我几乎一字不差地复制了代码,因为它们都对浮点/双精度类型使用64位浮点,对数学运算符(and)使用相同的运算符优先级。但是,在调试时,我发现两者的结果有所不同。具体来说,JavaScript中的这一行: var mu = M / (this.a * (1 - esq * (1 / 4 + esq * (3 / 64 + 5 * esq / 256)))); 及其Java等价物: Double mu = M / (a * (1 - esq * (1 / 4

我试图用Java实现一个JS函数。我几乎一字不差地复制了代码,因为它们都对浮点/双精度类型使用64位浮点,对数学运算符(and)使用相同的运算符优先级。但是,在调试时,我发现两者的结果有所不同。具体来说,JavaScript中的这一行:

 var mu = M / (this.a * (1 - esq * (1 / 4 + esq * (3 / 64 + 5 * esq / 256)))); 
及其Java等价物:

Double mu = M / (a * (1 - esq * (1 / 4 + esq * (3 / 64 + 5 * esq / 256))));
具有以下值:

M=4373246.298519407, esq=0.006694379989312105, a=6378137.0

结果分别为0.6856620239020387和0.6868129133457879。有人能解释一下并给出正确的Java代码吗?这种不精确性正在转化为函数最终输出的巨大差异。Javascript和Java之间的代码并不完全相同

在Javascript中,所有数字都是双倍的,所以。然而,在Java中,整数除法将发生,因此例如
1/4
将产生
0
,而不是
0.25

如前所述,在Java中我得到
0.6856620239020387

将Java数字更改为使用
double
文字:

Double mu = M / (a * (1.0 - esq * (1.0 / 4.0 + esq * (3.0 / 64.0 + 5.0 * esq / 256.0))));

现在,我得到了另一个数字:
0.6868129133457879
,这是我在Javascript中得到的值。

注意,没有必要更改所有常量。这也是可行的:
Double mu=M/(a*(1-esq*(1.0/4+esq*(3.0/64+5*esq/256))哎呀,我不应该错过整数除法。当我发布这个问题时,我并没有真正思考。谢谢你指出这一点!