为什么模运算在ruby中的工作方式与其他语言不同?

为什么模运算在ruby中的工作方式与其他语言不同?,ruby,Ruby,在Ruby中,我得到: -5 % 3 # => 1 而其他的语言如PHP、JavaScript、C++和java都产生了结果 -2 < /Cord>。我不明白这个概念。我希望有人能解释一下这个红宝石的计算方法。如果你能用一个例子来说明它是如何工作的,那就更好了。它在文档中: 如果q,r=x.divmod(y),则 q = floor(x/y) x = q*y + r 商被四舍五入到负无穷大 所以q是-3(-5/2,按照通常的整数除法规则向下取整)。和 r= x -q*y= -5×3×2

在Ruby中,我得到:

-5 % 3 # => 1
而其他的语言如PHP、JavaScript、C++和java都产生了结果<代码> -2 < /Cord>。我不明白这个概念。我希望有人能解释一下这个红宝石的计算方法。如果你能用一个例子来说明它是如何工作的,那就更好了。

它在文档中:

如果
q,r=x.divmod(y)
,则

q = floor(x/y)
x = q*y + r
商被四舍五入到负无穷大


所以
q
是-3(-5/2,按照通常的整数除法规则向下取整)。和<代码> r= x -q*y= -5×3×2=1 < /代码> < /p>您想要<代码> ->剩余(3)< />代码>返回代码< -> 2代码> AFAIK <代码> 5% 3 < /Cord>是C和C++中定义的实现,可以是“代码> -2”/代码>或<代码> 1 >代码>取决于CPU如何实现负数和它认为“最小”的模数。意思是:
-2
1
小,因为
-2<1
但是
-2
1
大,因为
-2
-1
大。这取决于你想要什么作为由模导出的元素的代表集。这是你认为
{-2,-1,0}
更自然还是
{0,1,2}
更自然。鲁比接受后者,我也是。