在JavaScript中,%运算符似乎表现得非常奇怪。我尝试了以下内容:
>>> (0 - 11) % 12
-11
为什么返回-11而不是1(与Python的结果不同)?我确定我做错了或期望错了,但文档没有告诉我是哪里出了问题。
在JavaScript中,%运算符似乎表现得非常奇怪。我尝试了以下内容:
>>> (0 - 11) % 12
-11
n/d
是负数,因此结果也是负数。
请参阅维基百科关于模运算的条目以获取更多详细信息,包括按结果符号进行分类的语言列表。有两个类似的操作:模运算和余数运算。模运算表示更数学化的用法,而余数运算则更多地用于IT。
假设我们有两个整数a和b。
MOD(a,b)将返回与b相同符号的结果。
REM(a,b)将返回与a相同符号的结果。 - 这是在C / C ++ / C#中实现为%运算符并经常令人困惑地称为“mod”的内容
您也可以这样想:
MOD(a,b)将找到小于a的最大整数倍数b(称为“c”),并返回(a-c)。
例如MOD(-340,60),我们发现c = -360是小于-340的最大60的倍数。因此,我们得到(-340-(-360))= 20。
REM(a,b)将返回一个值,使得(DIV(a,b)* b)+ REM(a,b)= a,其中DIV()表示整数除法。
因此,对于r = REM(-340,60)
-340 = DIV(-340,60)* 60 + r = -5 * 60 + r = r-300
这将解决问题,使得 r = -40。
-11 < 12,所以我“猜测”它们实际上并没有被除尽: 因此,-11 = 0x12 -11
试试看 (0-13) % 12
Python中的math模块中的fmod函数表现正常:
>>> from math import *
>>> fmod(-11, 12)
-11.0
-11 是正确答案。