我有两个问题
我有一个rails应用程序从rss feed获取有关货币的市场数据,这些数据以下列格式返回数据
a = ["31.25", "*33.00*", "*+1.75*", "*5.60%*", "33", "33"]
b = ["3.55", "*3.45*", "*-0.10*", "*-2.82%*", "3.5", "3.4"]
我需要将这些值作为十进制数据类型列存储在数据库中以用于精确目的,因为我正在处理钱。
第一个问题是:
我需要将上面的数组转换为以下格式,
a = [31.25,33.00,1.75,5.60,33,33]
b = [3.55,3.45,-0.10,2.82,3.5,3.4]
第二个问题是,
我应该使用什么rails命令为sqlite和postgresql数据库创建一个模型,其中一列具有存储带符号小数的功能,例如+1.75和-0.10
我试过
rails g model currency dollar:decimal
相反,当我在此模型中保存-0.10然后使用
查询它时Currency.last.dollar
返回以下内容,而我只需要它返回-0.10
#<BigDecimal:ae244d8,'0.0',9(27)>
答案 0 :(得分:1)
第一个问题:
a.map{ |x| x.scan(/[\d\.-]+/)[0] }.map(&:to_f)
第二
Currency.first.dollar.to_f # => -0.1
或者this可能更合适:
add_column :currency, :dollar, :decimal, precision: 8, scale: 2
答案 1 :(得分:0)
使用regexps:
f = []
a.each do |i|
f << i.match(/\-?[0-9]{1,2}(\.[0-9]{1,2})?/)[0].to_f
end
puts f
如果您有大量数据,请使用预先编译的regexp