Ruby中带负值的整数除法

Ruby中带负值的整数除法,ruby,division,Ruby,Division,尝试在Ruby中进行负值除法,例如-123/10,为什么它返回-13而不是-12 ruby -v ruby 1.9.3p375 (2013-01-18) [x86_64-darwin12.2.1] irb(main):001:0> -123/10 => -13 irb(main):002:0> -123%10 => 7 -123/10按预期返回-12和-123%10在C/C++中返回-3。这就是它的设计方式。在负除法和模运算的情况下,Ruby将数字向负无穷大舍入。这不

尝试在Ruby中进行负值除法,例如-123/10,为什么它返回-13而不是-12

ruby -v
ruby 1.9.3p375 (2013-01-18) [x86_64-darwin12.2.1]

irb(main):001:0> -123/10
=> -13
irb(main):002:0> -123%10
=> 7

-123/10按预期返回-12和-123%10在C/C++中返回-3。

这就是它的设计方式。在负除法和模运算的情况下,Ruby将数字向负无穷大舍入。这不是Ruby所独有的,Python和Perl的行为也是如此

然而,这种方法提供了一个很好的数学理由

a/b=q
带余数
r

以致

b * q + r = a and 0 <= r < b

<代码> B*Q+R= A和0。C和C++中的<代码> -123% 10 的结果是,依赖于平台,所以小心使用C行为作为标准。引用(以及原始)是误导性的。1.这个公式确实是在日本的小学里教授的,但不仅仅是在日本。2.日本小学不教负数。通过将公式扩展为负数,可以得到这种行为。不是因为它是这样教的。@sawa根据您的评论更新了我的答案。Ruby论坛链接已失效:(