Java与JavaScript对同一等式给出了不同的结果&;输入值
以下等式和值使用Java/Javscript提供不同的网络输出: Javascript:Java与JavaScript对同一等式给出了不同的结果&;输入值,java,javascript,Java,Javascript,以下等式和值使用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 + year
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
如果月日=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
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
从反斜杠答案中重新获得建议:
var dayOfWeek=parseInt(parseInt(月日+26*parseInt(月日+1)/10+世纪年+parseInt(世纪年/4)+parseInt(世纪/4)+parseInt(5*century))%7) 干杯,所以改变了JS方程并得到了正确的输出:var dayOfWeek=parseInt(parseInt(dayOfMonth+26*parseInt(monthOfYear+1)/10+yearOfCentury+parseInt(yearOfCentury/4)+parseInt(century/4)+parseInt(5*century))%7)。似乎还有很长的路要走,有没有比用parseInt()分解表达式的每个部分更有效的方法?@dancingbush我认为没有,因为javascript没有java类型,一切都是
var
,你不能声明int
,所以它会将double、int等视为一个通用数字,不关心整数除法。我认为如果不使用parseInt
,您将始终拥有浮点操作(如果需要)。