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”仅显示一位精度。我需要帮助来理解和解决问题。我想要输出中有两位数的精度。

还有我该如何改进这段代码?

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。将它们都显示出来,世界上突然多了一分钱。

而是将金额存储在整数中。例如,1 美元是balance = 100或 100 便士。然后格式化显示的值:

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 回答