0

以下方程和值使用 Java/Javscript 给出不同的输出: Javascript:

var dayOfWeek = parseInt((dayOfMonth + 26 * (monthOfYear +1) / 10 + yearOfCentury + yearOfCentury / 4 + century / 4 + 5 * century) % 7);

爪哇:

int dayOfWeek = (dayOfMonth + 26 * (monthOfYear +1) / 10 + yearOfCentury + yearOfCentury / 4 + century / 4 + 5 * century) % 7; code here

如果 dayOfMonth =28,monthOfYear =7,yearOfCentury = 9,世纪=20

Java 返回 dayOfWeek = 3(这是正确的!) JS 返回 dayOfWeek = 4!(奇怪的)

任何反馈表示赞赏。

4

2 回答 2

2

那是因为 java 正在执行整数运算,因为所有变量都有 type 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.

如果您的变量都是ints,则每个结果都将转换为 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

于 2013-09-22T12:25:14.170 回答
0

来自反斜杠答案的建议:

var dayOfWeek = parseInt(parseInt(dayOfMonth + 26 * parseInt(monthOfYear +1) / 10 + yearOfCentury + parseInt(yearOfCentury / 4) + parseInt(世纪 / 4) + parseInt(5 * 世纪)) % 7); .

于 2013-09-22T17:02:13.857 回答