2012-08-02 54 views
11

這裏是我的代碼如何與精度兩位數字顯示輸出

class Atm 

    attr_accessor :amount, :rem, :balance 

    TAX = 0.50 

    def transaction 

    @rem = @balance=2000.00 
    @amount = gets.chomp.to_f 

    if @amount%5 != 0 || @balance < @amount 
     "Incorrect Withdrawal Amount(not multiple of 5) or you don't have enough balance" 
    else 
     @rem = @balance-(@amount+TAX) 
     "Successful Transaction" 
    end 
    end 
end 

a=Atm.new 
puts "Enter amount for transaction" 
puts a.transaction 
puts "Your balance is #{a.rem.to_f}" 

和我的輸出是

Enter amount for transaction 
100        # user enters this value 
Successful Transaction 
Your balance is 1899.5 

,你可以看到輸出,「您的餘額爲1899.5」只顯示一個精度數字。我需要幫助來理解和解決問題。我想要輸出兩位數的精度。

同時,我怎樣才能改善這種代碼?

回答

21

您可以使用此:

puts "Your balance is #{'%.02f' % a.rem}" 

但請記住,這個代碼將圓你的結果,如果你有超過2位小數。例如:199.789將變成199.79。

+0

謝謝MurifoX,我也想知道如果我能以任何方式改進我的代碼?刪除任何不必要的代碼或類似的東西? – 2012-08-02 17:50:04

+0

你的代碼很好。只需要將邏輯分成小塊代碼,以便其他人可以更好地理解它。請記住,如果答案是有用的,你可以隨時接受它來幫助其他人。 – MurifoX 2012-08-02 18:04:00

+0

「2」前面的「0」是否有特殊含義? – sschuberth 2016-06-14 08:11:37

6
number_with_precision(value, :precision => 2) 

應在Rails的工作

+0

嗨!安東尼,我還沒有上軌,剛剛開始學習紅寶石,但我感謝你的迴應,會記住這個代碼。 – 2012-08-02 17:48:32

9

這是一個基本的設計缺陷來賺錢存儲爲一個浮點數,因爲花車是不準確的。貨幣應始終以最小貨幣單位存儲爲整數。

試想兩個帳戶1.005。同時顯示它們,突然間世界上還有一分錢。

取而代之的金額存儲在一個整數。例如,1美元將是balance = 100或100便士。然後格式化顯示值:

money = 1000 
"%.2f" % (money/100.0) 
# => 10.00 
+1

這很有道理,我一定會記住這一點。非常感謝你與我分享你的知識。 – 2012-08-02 20:56:23

+0

我可以把它轉換成浮動結尾沒有 – user4965201 2015-11-20 13:02:16

+0

@ user4965201這沒有任何意義失去了2個0。 float是一個數字,我們可以同意5.0和5.00是相同的數字。當您在網站上顯示5.0時,您需要將數字轉換爲字符串,因爲數字是一個抽象概念,需要通過人類語言進行溝通,在本例中爲文本。 – AJcodez 2015-11-20 18:43:20

相關問題