我有
price_input = gets.strip.to_i
我正在嘗試將其添加到哈希陣列中。添加到陣列有效,但 .gets.strip.to_i 洗掉任何小數。有沒有辦法在不洗掉小數的情況下添加它?
為了進一步理解,我有一個現有的哈希陣列,其中(價格:[一個整數])我稍后將這些整數與代碼一起添加,所以我需要 .to_i 因為我無法添加字串和整數
uj5u.com熱心網友回復:
以 BigDecimal 存盤輸入字串
整數不是浮點數,浮點數是處理財務表示的不好方法。有一些處理金錢的寶石可以抽象出浮點數學的各種問題,但如果你只是在尋找簡單的東西:
require "bigdecimal"
print "Enter a price: "
price_input = BigDecimal(gets)
puts "You entered $#{price_input.to_f.round 2}"
您甚至不必扼殺或剝離您的輸入,因為BigDecimal會為您處理。但是,請記住,即使 BigDecimal 或 Real 可以正確處理小數美分,當您轉換回精度為 2 的浮點數時,任何涉及一美分小數的東西都可能導致一種或另一種舍入錯誤,所以你無論您的內部表示如何,都需要決定如何處理舍入。
也可以看看
- 浮動#地板
- 浮點數#ceil
- 浮點數#round
- 浮動#rationalize
uj5u.com熱心網友回復:
你可以使用to_f方法。它將String物件轉換為Float物件。你也不需要strip方法
" 0.2 ".to_f
# => 0.2
或者在你的情況下
price_input = gets.to_f
請記住,當兩個整數相互作用時,結果將始終是整數。如果一個數字是整數,第二個是浮點數,則結果將是浮點數
uj5u.com熱心網友回復:
您可以在下面使用,這樣如果有人輸入字符而不是數字,則會引發錯誤。
price_input = Float(gets)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/434169.html
