[英]Why does CoffeeScript use %% for modulo instead of the standard javascript operator %
在关于运算符的CoffeeScript文档中,它说你可以使用%%
作为真正的数学模,但是没有解释为什么这与JavaScript中的“模运算符” %
不同。
再往下说,CoffeeScript中a %% b
相当于在JavaScript中编写(a % b + b) % b
,但这似乎对大多数简单情况产生相同的结果。
我确实在另一个StackOverflow问题中找到答案并回答Javascript模数不行为 , 我想分享给那些喜欢我的人只寻找“CoffeeScript”相关的解释,因此很难找到正确的答案。
使用编译为(a % b + b) % b
a %% b
的原因是对于负数,如-5 % 3
,JavaScript将产生负数-5 % 3 = -2
而正确的数学答案应为-5 % 3 = 1
。
接受的答案是指一篇关于JavaScript模数错误的文章,它解释得很好。
起初对我没有任何意义,所以我认为它需要一个例子
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
###
看起来modulo是一个数学技巧,能够为所有数字使用一个公式,而不是一个用于负数,第二个用于正数。 不知道它不仅仅是一个技巧,而且具有一些内在意义。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.