Java 和 Java 脚本之间的计算结果差异

difference in calculation results between Java and Javascript

我正在尝试在 Java 中实现一个 JS 函数。我几乎一字不差地复制了代码,因为它们都对 float/Double 类型使用 64 位浮点数,对数学运算符 (http://docs.oracle.com/javase/tutorial/java/nutsandbolts/operators.html and https://msdn.microsoft.com/en-us/library/ie/z3ks45k7(v=vs.94).aspx) 使用相同的运算符优先级。但是,我在调试时发现两者之间的结果有所不同。具体来说,Java脚本中的这一行:

 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 之间的代码并不完全相同。

在Java脚本中,所有数字都是双精度数,所以floating-point math will take place。但是,在 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.

中得到的值