2011-09-21 87 views
2

我嘗試了幾分鐘前簡單的數學運算紅寶石 - 數學運算

<%=((3+2+1)/100).round(8)%> 

結果是0.06,但上面的Ruby代碼的結果是0.0。我預計結果應該是0.060000。

爲什麼不呢? 由於

回答

6
(3+2+1)/100 

0因爲劃分是整數。嘗試

(3+2+1)/100.0 

你看,如果/兩個參數都是整數,除法的結果是一個整數(整數部分)。如果至少有一個參數是浮點數,那麼結果也是浮點數。

+1

另一個選項是fdiv。 6.fdiv(100)#=> 0.06 – steenslag

+0

@steenslag:我甚至都不知道Ruby ......完全不是這樣,我的回答在所有我知道的語言中都是正確的。 –

+0

@Armen Tsirunyan:曾經聽說過Perl,awk,Haskell? ;-) –

2

僅涉及整數數據的操作以整數完成(然後6/1000)。將0轉換爲稍後浮動(由round)不會使您退回已經丟棄的小數部分。

將這兩個值中的任何一個更改爲浮點數(例如3.0),即可完成。

4

可怕的整數算術再次發作!

當你計算((3 + 2 + 1)/ 100)時,由於所有操作數都是整數,Ruby使用整數算術而不是浮點算法。

如果你做的是7/100,它也會返回0,因爲它向下取整爲最接近的整數,即爲0.