2013-05-13 59 views
5

嘗試在Ruby中執行負值分割-123/10,爲什麼它返回-13而不是-12?Ruby中的整數除法值爲負值

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。

+1

的C和C'-123%10' ++的結果是,據我所知,依賴於平臺的,所以要小心使用C的行爲作爲標準。 – 2013-05-13 20:51:33

回答

7

這就是它的設計原理。 Ruby在負分割和模運算的情況下將數字向負無窮大移動。這不是Ruby獨有的,Python和Perl的行爲也是如此。

但是,這種方法提供了一個很好的數學原因。

a/b = q與其餘r

這樣

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

從我讀,這是算術如何教在日本。

編輯:

sawa指出,這是算術多麼積極的教在日本,而不是負數。不過,正如他所說,這也可以擴展到負數。

來源:

Ruby Forums

+0

您的引用(以及原文)有誤導性。這個公式的確是在日本的小學教授的,但它不僅在日本。 2.日本小學不會教負數。您通過將公式擴展到負數來獲得該行爲。不是因爲它是這樣教的。 – sawa 2013-05-13 21:35:11

+1

@sawa通過考慮您的評論更新了我的答案。 – 2013-05-13 21:41:08

+0

Ruby論壇鏈接已死: – 2016-12-19 03:50:59