在Rails控制台中将大十进制转换为字符串

时间:2014-01-07 19:09:46

标签: count ruby-on-rails-4 console sum

我正在尝试让我的控制台打印出所有我的位置价目表定价的总和。

我试图通过控制台完成此任务,但结果是获得了BigDecimal。坚持如何将此结果转换为易读的字符串或整数。

结果:

Location.pluck(:rate_card).sum
      => "#<BigDecimal:7f7cf347edd0,'0.3091675E6',18(36)>"

在我的位置'索引'中,为了能够看到一个美元金额,我将此设置为:

 <%= number_to_currency(location.rate_card, :precision => 2) %>

TIA

3 个答案:

答案 0 :(得分:9)

Location.each do |e|
  puts e.rate_card.to_s.to_f.round(2)
end

答案 1 :(得分:3)

您看到:rate_card作为BigDecimal返回,因为它是在数据库架构中定义的。如果您要在Rails控制台中发出Location.rate_card.class,您会看到=> BigDecimal

如@Darby所述,您可以使用round。在控制台中,发出Location.pluck(:rate_card).sum.round(2)并且应该正确显示所需的结果。

最后,您的结果的第二部分是否有意义?您显示正在使用的代码以正确显示视图代码,但我认为它不会影响您的问题。

答案 2 :(得分:1)

BigDecimal可以转换为这样的字符串。

pry(main)> b = BigDecimal.new('78.23')
=> #<BigDecimal:7ff0119cab68,'0.7823E2',18(18)>
[37] pry(main)> b.to_s
=> "0.7823E2"

您不需要先将其更改为字符串,然后再将其更改为浮点数。 to_f是在BigDecimal对象上定义的。

[34] pry(main)> b.to_f
=> 78.23

对于整数和有理数,还有to_ito_r