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

これは、すべての変数が type であるため、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.

変数がすべてints の場合、すべての結果が int にキャストされるため、式は次のようになります。

(28 + 20 + 9 + 2 + 5 + 100) % 7 = 164 % 7 = 3

26*(7 + 1)/10は ですが20.8、 にキャストされるintため、小数部分が失われます。

しかし、最初の 2 行を次のように変更すると、

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 に答える