为什么CoffeeScript使用%%表示模而不是标准javascript运算符%

为什么CoffeeScript使用%%表示模而不是标准javascript运算符%,javascript,coffeescript,operators,modulo,Javascript,Coffeescript,Operators,Modulo,在中,它说您可以使用%%进行真正的数学模运算,但没有解释为什么这与JavaScript中的“模运算器”%%不同 进一步说,CoffeeScript中的a%%b相当于用JavaScript编写(a%b+b)%b,但对于大多数简单的情况,这似乎产生了相同的结果。我确实在另一个StackOverflow问题和答案中找到了答案,对于像我一样只寻找“CoffeeScript”的人来说相关的解释,因此很难找到正确的答案 使用编译为(a%b+b)%b的a%%b的原因是,对于负数,如-5%3,JavaScrip

在中,它说您可以使用
%%
进行真正的数学模运算,但没有解释为什么这与JavaScript中的“模运算器”
%%
不同


进一步说,CoffeeScript中的
a%%b
相当于用JavaScript编写
(a%b+b)%b
,但对于大多数简单的情况,这似乎产生了相同的结果。

我确实在另一个StackOverflow问题和答案中找到了答案,对于像我一样只寻找“CoffeeScript”的人来说相关的解释,因此很难找到正确的答案

使用编译为
(a%b+b)%b
a%%b
的原因是,对于负数,如
-5%3
,JavaScript将生成负数
-5%3=-2
,而正确的数学答案应该是
-5%3=1


公认的答案指的是能很好地解释它的原因。

起初对我来说没有意义,所以我认为它需要一个例子

check = (a,b) ->
  c = (b*Math.floor(a/b)) + a%b
  d = (b*Math.floor(a/b)) + a%%b
  console.log(
    [c, c == a]
    [d, d == a]
  )

check  78, 33 # [ 78, true ] [ 78, true ]
check -78, 33 # [ -111, false ] [ -78, true ]

###
 78 mod 33 = 12
-78 mod 33 = 21

check:  78 = 33 *  2 + 12
check: -78 = 33 * -3 + 21
###
看起来模是一个数学技巧,可以对所有数字使用一个公式,而不是一个用于负数,第二个用于正数。我不知道这是否不仅仅是一个把戏,还有一些内在的意义