我嘗試了幾分鐘前簡單的數學運算紅寶石 - 數學運算
<%=((3+2+1)/100).round(8)%>
結果是0.06,但上面的Ruby代碼的結果是0.0。我預計結果應該是0.060000。
爲什麼不呢? 由於
我嘗試了幾分鐘前簡單的數學運算紅寶石 - 數學運算
<%=((3+2+1)/100).round(8)%>
結果是0.06,但上面的Ruby代碼的結果是0.0。我預計結果應該是0.060000。
爲什麼不呢? 由於
(3+2+1)/100
是0
因爲劃分是整數。嘗試
(3+2+1)/100.0
你看,如果/
兩個參數都是整數,除法的結果是一個整數(整數部分)。如果至少有一個參數是浮點數,那麼結果也是浮點數。
僅涉及整數數據的操作以整數完成(然後6/100
爲0
)。將0
轉換爲稍後浮動(由round
)不會使您退回已經丟棄的小數部分。
將這兩個值中的任何一個更改爲浮點數(例如3.0
),即可完成。
可怕的整數算術再次發作!
當你計算((3 + 2 + 1)/ 100)時,由於所有操作數都是整數,Ruby使用整數算術而不是浮點算法。
如果你做的是7/100,它也會返回0,因爲它向下取整爲最接近的整數,即爲0.
另一個選項是fdiv。 6.fdiv(100)#=> 0.06 – steenslag
@steenslag:我甚至都不知道Ruby ......完全不是這樣,我的回答在所有我知道的語言中都是正確的。 –
@Armen Tsirunyan:曾經聽說過Perl,awk,Haskell? ;-) –