Как отображать вывод с двумя цифрами точности

Вот мой код

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" отображает только одну цифру точности. Мне нужна помощь, чтобы понять и исправить проблему. Я хочу две цифры точности на выходе.

А также как я могу улучшить этот код?

Ответ 1

Вы можете использовать это:

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

Но помните, что этот код будет округлять ваш результат, если у вас более двух десятичных знаков. Пример: 199.789 станет 199.79.

Ответ 2

Это фундаментальный недостаток дизайна для хранения денег как числа с плавающей запятой, потому что поплавки неточны. Деньги всегда должны храниться как целое число в наименьшей единице валюты.

Представьте себе два счета с 1.005. Покажите их обоими, и вдруг в мире есть еще одна копейка.

Вместо этого храните сумму денег в целое число. Например, $1 будет balance = 100 или 100 пенни. Затем отформатируйте отображаемое значение:

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

Ответ 3

number_with_precision(value, :precision => 2)

Должен работать в Rails