我正在尝试将变量初始化为float,然后在时间循环中添加它。这是我的代码:
amt = 0.0
5.times do
amt = amt + ("%.2f" % (item.price * 0.05))
end
这是错误:
String can't be coerced into Float
编辑:
我改变了1.times do
。我调整了我的代码,使其更具可读性,1.times
不在我的实际代码中。
答案 0 :(得分:1)
首先,尽量不要使用浮点数 - 在这种情况下你需要做的是使用BigDecimal - 浮点数学不准确。
要使用BigDecimal,请在application.rb
中使用'bigdecimal'然后,你想要的是:
amt = BigDecimal.new("0")
1.times do
price = BigDecimal.new(item.price.to_s)
factor = BigDecimal.new("0.05")
amt += (price * factor).round(2)
end
amt
答案 1 :(得分:0)
对不起大家。我是Ruby的新手,所以我不知道这是问题所在,但是“%。2f”导致了这个问题。 (虽然与这个问题无关,但它的作用是将数量转换为两位小数精度。)愚蠢的错误!