如何在 JavaScript 中使用模运算符得到否定结果?
JavaScript 中的 %(modulo)运算符给出两个数字相除的余数。 %(modulo)和余数运算符之间存在差异。当对正数计算余数或 %(modulo) 时,两者的行为相似,但当使用负数时,两者的行为不同。
JavaScript %(modulo)的行为类似于余数运算并给出余数,由于数字为负数,因此余数也为负数。
让我们理解和比较%(模)和余数运算结果的清晰度。
模运算符示例:
For Positive Numbers:
Input: a = 21, b = 4
Output: 1
Explanation:
modulo = 21 % 4
modulo = 21 - 4 * 5
modulo = 21 - 20 = 1
Other Explanation:
The number 21 can be written in terms of 4 as
21 = 5 * 4 + 1
So, here '1' is the result.
For Negative Numbers:
Input: a = -23, b = 4
Output: 1
Explanation:
modulo = -23 % 4
modulo = -23 + 4 * 6
modulo = -23 + 24 = 1
Other Explanation:
The number -23 can be written in terms of 4 as
-23 = (-6) * 4 + 1
So, here '1' is the result.
余数运算符示例:
Remainder operator uses the formula:
Remainder = a - (a / b) * b
Note: Result of (a / b) is first converted into Integer Value.
For Positive Numbers:
Input: a = 21, b = 4
Output: 1
Explanation:
Remainder = 21 - (21 / 4) * 4
Remainder = 21 - 5 * 4
Remainder = 21 - 20 = 1
For Negative Numbers:
Input: a = -23, b = 4
Output: -3
Explanation:
Remainder = -23 -( -23 / 4) * 4
Remainder = -23 -(-5) * 4
Remainder = -23 + 20 = -3
因此,从上面的比较中,很明显,余数和模运算都是不同的。 JavaScript %(modulo)运算符只不过是余数运算符,这就是为什么它在负数上给出负数的原因。
- Number.prototype:原型构造函数允许向 JavaScript 数字添加新的属性和方法,以便所有数字都获得该属性并且可以默认访问方法。
因此,我们将使用Number.prototype创建一个 mod函数,该函数将返回两个数字的模数。句法:
Number.prototype.mod = function(a) { // Calculate return this % a; }
下面的程序说明了 JavaScript 中的 %(modulo)运算符:
示例 1:本示例使用模运算符(%) 进行运算。
输出:
The outcome is: 1
示例 2:
输出:
The outcome is: -1
因此,很清楚为什么 JavaScript %(modulo) 会给出否定的结果。
- 在 JavaScript 中进行更改 %(modulo) 以用作 mod运算符:像实际模数一样执行模运算符(%) 而不是计算余数。我们将使用以下公式。
假设数字是 a 和 b 然后计算mod = a % b句法:
Number.prototype.mod = function(b) { // Calculate return ((this % b) + b) % b; }
在上面的公式中,我们使用模属性(a + b) mod c = (a mod c + b mod c) mod c从余数计算模数。
下面的程序说明了上述方法:
例子:
输出:
The outcome is: 3 The outcome is: 2