以下等式&值使用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
如果dayOfMonth = 28,monthOfYear = 7,yearOfCentury = 9,century = 20
Java返回dayOfWeek = 3(这是正确的!) JS返回dayOfWeek = 4! (奇数)
任何反馈意见。
答案 0 :(得分:2)
这是因为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
s,那么每个结果都会被转换为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
答案 1 :(得分:0)
来自反斜杠的回复建议:
var dayOfWeek = parseInt(parseInt(dayOfMonth + 26 * parseInt(monthOfYear +1)/ 10 + yearOfCentury + parseInt(yearOfCentury / 4)+ parseInt(century / 4)+ parseInt(5 * century))%7);