Java 与 JavaScript 对于相同的方程和输入值给出不同的结果

标签 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

如果月日=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,每个结果都会被转换为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

关于Java 与 JavaScript 对于相同的方程和输入值给出不同的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18943754/

相关文章:

java - 反序列化大小大于 95Kb 的对象时出错,对于小于 95Kb 的对象工作正常

java - 用逗号扫描字符串

javascript - 正则表达式 Javascript 将 Twitter 用户名与一些附加信息相匹配

javascript - 突变观察者未移除。为什么? (795978错误)

javascript - Material ui + ReactJS 应用程序中的响应式按钮组按钮

java - 如果我需要做 Spring 友好的 WorkFlow,我应该看什么项目?

java - 为什么我必须使用 Integer.parseInt?

java - 使用 Apache Batik 缩放 SVG 图像时如何忽略比例?

javascript - 带三元运算符的 ReactJs 语法错误

javascript - 保持专注于重新加载 HTML 元素