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

出力を見るとわかるように、'Your balance is 1899.5' は 1 桁の精度しか表示しません。問題を理解して解決するための助けが必要です。出力に 2 桁の精度が必要です。

また、このコードを改善するにはどうすればよいですか?

4

3 に答える 3

21

これを使用できます:

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

ただし、小数点以下 2 桁を超える場合、このコードは結果を丸めることに注意してください。例: 199.789 は 199.79 になります。

于 2012-08-02T17:41:27.740 に答える
9

浮動小数点数は不正確であるため、お金を浮動小数点数として格納するのは基本的な設計上の欠陥です。通貨は、通貨の最小単位の整数として常に格納する必要があります。

1.005 の 2 つのアカウントがあるとします。両方を表示すると、突然、余分なペニーが世界に表示されます。

代わりに、金額を整数で格納します。たとえば、1 ドルはbalance = 100100 ペニーです。次に、表示された値をフォーマットします。

money = 1000
"%.2f" % (money / 100.0)
# => 10.00
于 2012-08-02T20:08:05.960 に答える
7
number_with_precision(value, :precision => 2)

Railsで動作するはずです

于 2012-08-02T17:41:15.480 に答える