8

Javascript 将以下代码段评估为 -1。

-5 % 4

我知道余数定理表明 a = bq + r 使得 0 ≤ r < b。鉴于上述定义,答案不应该是 3 吗?为什么 JavaScript 返回 -1?

4

5 回答 5

8

因为它是余数运算符,而不是模数。但是有一个合适的建议

来自 Ecma 5.1 的引用

被除数 n 和除数 d 的余数 r 由数学关系 r = n - (d × q) 定义,其中 q 是一个整数,仅当 n/d 为负时为负,仅当 n/d 为正时为正

于 2014-09-08T14:40:40.420 回答
6

大多数编程语言使用对称模数,这与负值的数学模数不同。

数学模可以使用对称模计算,如下所示:

a mod b = ((a % b) + b) % b

mod数学模

%对称模

于 2017-11-17T15:45:01.103 回答
1

原因是它%不是模数而是余数运算符。看这里

于 2014-09-08T14:41:42.187 回答
0

如果您%用于进行模运算,则计算结果为 –1 或 3 并不重要(至少在概念上)-5 % 4,因为这两个数字在模 4 下是全等的:就模运算而言,它们是相同的.

于 2015-04-24T23:26:20.790 回答
0

...如果余数不为零,则余数有两种可能的选择,一种是负数,另一种是正数,商也有两种可能的选择。通常,在数论中,总是选择正余数,但编程语言根据语言以及 a 和 n 的符号进行选择。(http://en.wikipedia.org/wiki/Modulo_operation

在python中,它采用除数的符号:

   -5 % 4 ==  3   # -5 = (-2) * 4 + 3

在 javascript 中,它采用除法符号:

   -5 % 4 ==  -1   # -5 = (-1) * 4 - 1
于 2014-09-08T14:47:09.843 回答