8

尝试在 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 在 C/C++ 中按预期返回 -12 和 -123%10 返回 -3。

4

1 回答 1

8

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

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

a / b = q有余数r

这样

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

从我读到的,这就是日本的算术教学方式。

编辑:

和指出,这就是日本教正数算术的方式,而不是负数。然而,正如他所说,这也可以扩展到负数。

资料来源:

红宝石论坛

于 2013-05-13T20:44:51.823 回答