在JavaScript中,%运算符似乎表现得非常奇怪.我尝试了以下方法:
>>> (0 - 11) % 12 -11
为什么它返回-11而不是1(如在Python中)?
我确信我正在做或期待出错,但文档并没有告诉我什么.
它根据语言的指定方式(例如ECMA 262)正确运行,它被称为余数运算符而不是模运算符.从规格:
ECMAScript浮点余数运算的结果由IEEE算法规则决定:
如果任一操作数是NaN,则结果为NaN.
结果的符号等于股息的符号.
如果被除数是无穷大,或除数是零或两者,则结果为NaN.
如果被除数是有限的且除数是无穷大,则结果等于被除数.
如果被除数为零且除数为非零且有限,则结果与被除数相同.
在剩余的情况下,无论是无穷大,也不是零,也不涉及NaN,
r
来自被除数n
和除数的浮点余数d
由数学关系定义,r = n - (d * q)
其中q
只有n/d
负数且仅为正数时为负数的整数如果n/d
是正数,且其幅度尽可能大而不超过真正的数学商的大小n
和d
.r
计算并使用IEEE 754舍入到最近模式舍入到最接近的可表示值.
在你的情况下n/d
是负面的,所以结果是负面的.
有关更多详细信息,请参阅有关模数的Wikipedia条目,包括具有结果符号行为的语言列表.