Ответ 1
Вы можете использовать это:
puts "Your balance is #{'%.02f' % a.rem}"
Но помните, что этот код будет округлять ваш результат, если у вас более двух десятичных знаков. Пример: 199.789 станет 199.79.
Вот мой код
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" отображает только одну цифру точности. Мне нужна помощь, чтобы понять и исправить проблему. Я хочу две цифры точности на выходе.
А также как я могу улучшить этот код?
Вы можете использовать это:
puts "Your balance is #{'%.02f' % a.rem}"
Но помните, что этот код будет округлять ваш результат, если у вас более двух десятичных знаков. Пример: 199.789 станет 199.79.
Это фундаментальный недостаток дизайна для хранения денег как числа с плавающей запятой, потому что поплавки неточны. Деньги всегда должны храниться как целое число в наименьшей единице валюты.
Представьте себе два счета с 1.005. Покажите их обоими, и вдруг в мире есть еще одна копейка.
Вместо этого храните сумму денег в целое число. Например, $1 будет balance = 100
или 100 пенни. Затем отформатируйте отображаемое значение:
money = 1000
"%.2f" % (money / 100.0)
# => 10.00
number_with_precision(value, :precision => 2)
Должен работать в Rails