这是我的代码
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
你可以看到输出,&#39;你的余额是1899.5&#39;仅显示一位精度。我需要帮助来理解和解决问题。我希望输出中有两位数的精度。
还有我如何改进此代码?
答案 0 :(得分:21)
您可以使用:
puts "Your balance is #{'%.02f' % a.rem}"
但请记住,如果您的小数位数超过2,则此代码会对您的结果进行舍入。例如:199.789将成为199.79。
答案 1 :(得分:9)
将货币存储为浮点数是一个基本的设计缺陷,因为浮点数是不精确的。货币应始终以最小货币单位存储为整数。
想象一下1.005的两个帐户。展示他们两个,突然间世界上还有一分钱。
而是将金额存储在整数中。例如,$ 1将是balance = 100
或100便士。然后格式化显示的值:
money = 1000
"%.2f" % (money / 100.0)
# => 10.00
答案 2 :(得分:7)
number_with_precision(value, :precision => 2)
应该在Rails中工作