gpt4 book ai didi

JavaScript 表达式评估错误

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:00:42 25 4
gpt4 key购买 nike

我正在使用 Zeller's Congruence 来预测给定日期是星期几。该算法将返回 0...6 中的值。 0表示星期日,1表示星期一,2表示星期二,依此类推。算法是这样的:

日 = ((26M-2)/10 + D + Y + Y/4 + C/4 + 5C) MOD 7

算法中有一部分是这样写的

IF Month < 3 THEN
Year = Year - 1
Month = Month + 10
ELSE
Month = Month - 2
END IF;

其中 D 是日期,Y 是年份的最后两位,M 是月份,C 是世纪,它是年份的前两个数字。

出于某种原因,当我将其插入 javascript 时,我得到的结果不正确。以 2/15/16 为日期。这个日期发生在星期一。这是我的算法代码:

(Math.floor((26 * monthVal) - 2/10) + dayVal + yearVal + Math.floor(yearVal/4) + Math.floor(centuryVal/4) + (5 * centuryVal)) % 7

我放入调试语句以确保 monthValdayValyearVal 等都是正确的,它们都是正确的。此表达式的计算结果应为 1,但由于某种原因它的计算结果为 0。当我分解它时,我得到了正确的结果。所以:

Math.floor(((26 * monthVal) - 2)/10) 上面给出的日期是 Math.floor(((26 * 12) - 2)/10) = 31

dayVal = 15, yearVal = 15, centuryVal = 20, Math.floor(yearVal/4) = 3Math.floor(centuryVal/4) = 5(5 * centuryVal) = 100

如果我们将所有这些放在一起,我们会得到

(31 + 15 + 15 + 3 + 5 + 100) % 7 = 1

当我像上面那样用数字将它插入计算机时,它会得到正确答案。但是当我使用变量名并将它们放在一起时,就像我在上面 11-12 行所做的那样,相同的表达式结果为 0 并且我不知道为什么。为什么它会给我错误的答案,即使当我手工操作时我得到了正确的答案?我是否遗漏了与操作优先级相关的内容?

最佳答案

看起来你的第一个表达式看起来不错(至少今天是这样),如果你在这个位置放一个括号:

(Math.floor((26 * monthVal - 2) / 10) + dayVal + yearVal + Math.floor(yearVal / 4) + Math.floor(centuryVal / 4) + (5 * centuryVal)) % 7

注意 2 之后的括号,而不是之前的括号。

https://jsfiddle.net/7hjw63d3/

关于JavaScript 表达式评估错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36074618/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com