如何初始化基元并添加到基元?

时间:2012-01-15 01:45:03

标签: ruby-on-rails ruby

我正在尝试将变量初始化为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不在我的实际代码中。

2 个答案:

答案 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”导致了这个问题。 (虽然与这个问题无关,但它的作用是将数量转换为两位小数精度。)愚蠢的错误!