货币到数字转换轨道

时间:2014-06-11 21:54:25

标签: ruby-on-rails ruby-on-rails-4 ruby-on-rails-4.1

Rails 4.1    Ruby 2.0    Windows 8.1

我找到了number_to_currency助手,但没有找到currency_to_number。我试图将$ 8,000之类的东西转换为小数。那有没有Rails助手?有什么想法吗?

的评论:

我一直在用这个:

number.to_s.gsub(/[^\d\.]/, '').to_f

除了数字和小数点之外,它还消除了所有内容,并且还处理了意外整数。我想知道我是否错过了某种currency_to_number助手。看起来我不是。我会接受其中一个答案。

4 个答案:

答案 0 :(得分:8)

乔治的答案很好,但我认为你已经知道货币是如何进入的。这将需要白名单而不是黑名单。

def currency_to_number currency
 currency.to_s.gsub(/[$,]/,'').to_f
end

答案 1 :(得分:2)

number_to_currency格式化一个数字。如果您尝试将$ 8.000之类的内容转换为数字,则可能需要创建一个新方法来将字符串解析为数字。类似的东西:

result = "$8.000".gsub(/[^\d]/, '').to_f

改进了以下内容的转换:

" $ 8.000,00"

你需要一个更好的正则表达式。

答案 2 :(得分:2)

我刚刚在IRB中对此进行了测试,您希望将其放在某种方法中,以便与Rails一起使用。

price = "$8,000.90"
price.match(/(\d.+)/)[1].gsub(',','').to_f

#=> 8000.9

答案 3 :(得分:0)

没有内置方法,但像这样的方法可以解决问题

def currency_to_number(currency_value)
  (currency_value.is_a? String) ? currency_value.scan(/[.0-9]/).join.to_d : currency_value
end

如果传递了String,则此方法返回Decimal,如果需要float,则使用“.to_f”。