Ruby 中的负数除法

bel*_*ros 2 ruby

任何人都可以解释负数除法的以下结果:

2.6.1 :001 > -25/24
 => -2 
2.6.1 :002 > 25/24
 => 1 

Run Code Online (Sandbox Code Playgroud)

为什么是它-2而不是-1

更多关于奇怪行为的例子:

2.6.1 :003 > 24/25
 => 0 
2.6.1 :004 > -24/25
 => -1 
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?谢谢你。

Ste*_*fan 5

不同的编程语言对(负)整数除法使用不同的定义。Ruby 使用了KnuthConcrete Mathematics 中描述的方法,第 10 页。82.

可以通过一个例子来说明:假设我们正在使用周。我们的星期从星期日开始。数字是从零开始的,所以我们从 week 0, day开始0

----- 0 -----
0 1 2 3 4 5 6
S M T W T F S
^
Run Code Online (Sandbox Code Playgroud)

如果我们继续前进了9天,我们在本周1,日2

----- 0 -----   ----- 1 -----
0 1 2 3 4 5 6   0 1 2 3 4 5 6
S M T W T F S   S M T W T F S
                    ^
Run Code Online (Sandbox Code Playgroud)

这些值由/和返回%

9 / 7 #=> 1
9 % 7 #=> 2
Run Code Online (Sandbox Code Playgroud)

如果我们向后移动9 天(从 0 开始),我们在 week -2, day 5

---- -2 -----   ---- -1 -----   ----- 0 -----
0 1 2 3 4 5 6   0 1 2 3 4 5 6   0 1 2 3 4 5 6
S M T W T F S   S M T W T F S   S M T W T F S
          ^
Run Code Online (Sandbox Code Playgroud)

使用/%

-9 / 7 #=> -2
-9 % 7 #=> 5
Run Code Online (Sandbox Code Playgroud)

该页面的页边空白处有一个有趣的注释:

当心使用其他定义的计算机语言。