以下方程和值使用 Java/Javscript 给出不同的输出: JavaScript:
var dayOfWeek = parseInt((dayOfMonth + 26 * (monthOfYear +1) / 10 + yearOfCentury + yearOfCentury / 4 + century / 4 + 5 * century) % 7);
Java:
int dayOfWeek = (dayOfMonth + 26 * (monthOfYear +1) / 10 + yearOfCentury + yearOfCentury / 4 + century / 4 + 5 * century) % 7; code here
如果月日=28,年月=7,世纪=9,世纪=20
Java 返回 dayOfWeek = 3 (这是正确的!) JS 返回 dayOfWeek = 4! (奇数)
感谢任何反馈。
最佳答案
这是因为 java 正在执行整数运算,因为所有变量的类型都是 int
。
这段代码:
int dayOfMonth = 28, monthOfYear = 7, yearOfCentury = 9, century = 20;
int result = (dayOfMonth + 26 * (monthOfYear +1) / 10 + yearOfCentury + yearOfCentury / 4 + century / 4 + 5 * century) % 7;
System.out.println(result);
输出
3
为什么?
您的操作方式
(28 + 26*(7 + 1)/10 + 9 + 8/4 + 20/4 + 5 * 20) % 7.
如果你的变量都是int
,每个结果都会被转换为int,所以你的表达式将变成
(28 + 20 + 9 + 2 + 5 + 100) % 7 = 164 % 7 = 3
26*(7 + 1)/10
是 20.8
,但它被转换为 int
,因此您将丢失小数部分。
但是如果你将前两行更改为
double dayOfMonth = 28, monthOfYear = 7, yearOfCentury = 9, century = 20;
double result = (dayOfMonth + 26 * (monthOfYear +1) / 10 + yearOfCentury + yearOfCentury / 4 + century / 4 + 5 * century) % 7;
输出将是
4.050000000000011
这与 javascript 的输出相同。然后使用 parseInt
函数(在 java 中为 Integer.parseInt
),因此最终结果将是 4
关于Java 与 JavaScript 对于相同的方程和输入值给出不同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18943754/