如何以两位精度显示输出

Aka*_*oti 11 ruby

这是我的代码

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}"
Run Code Online (Sandbox Code Playgroud)

我的输出是

Enter amount for transaction
100                              # user enters this value
Successful Transaction
Your balance is 1899.5
Run Code Online (Sandbox Code Playgroud)

正如你可以看到的输出,'你的余额是1899.5'只显示一位数的精度.我需要帮助来理解和解决问题.我希望输出中有两位数的精度.

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

Mur*_*foX 21

你可以用这个:

puts "Your balance is #{'%.02f' % a.rem}"
Run Code Online (Sandbox Code Playgroud)

但请记住,如果您有超过2个小数位,此代码将舍入您的结果.例如:199.789将成为199.79.


AJc*_*dez 9

将钱存储为浮点数是一个基本的设计缺陷,因为浮点数是不精确的.货币应始终以最小货币单位存储为整数.

设想两个帐户1.005.展示他们两个,突然间世界上还有一分钱.

而是将金额存储在整数中.例如,$ 1将是balance = 100100便士.然后格式化显示的值:

money = 1000
"%.2f" % (money / 100.0)
# => 10.00
Run Code Online (Sandbox Code Playgroud)


Ant*_*rto 7

number_with_precision(value, :precision => 2)
Run Code Online (Sandbox Code Playgroud)

应该在Rails中工作