Java与JavaScript对同一方程式给出了不同的结果。输入值

时间:2013-09-22 12:19:14

标签: java javascript

以下等式&值使用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! (奇数)

任何反馈意见。

2 个答案:

答案 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)/1020.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);