2014-06-11 218 views
4

的Rails 4.1 红宝石2.0 的Windows 8.1货币对数转换轨

我发现number_to_currency帮手,但没有currency_to_number。我正试图将8,000美元的东西转换成小数。有没有Rails的帮手?有任何想法吗?

评论:

我一直用这个:

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

消除与数字的例外,小数点一切,也处理意外的整数。我想知道我是否缺少某种currency_to_number助手。看起来我不是。我会接受其中一个答案。

回答

8

豪尔赫的回答很好,但我想你会知道如何进入货币。这将需要比黑名单更多的白名单。

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

这是肯定的最有效的方法。 – Snarf

+0

我想这可以更好地处理非美国的可能性 – EastsideDeveloper

2

number_to_currency格式化一个数字。如果您试图将类似$ 8.000的东西转换为数字,您可能需要创建一个新方法将字符串解析为数字。是这样的:

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

对于类似的改进转换:

“$ 8.000,00”

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

2

我刚刚在IRB中测试过这个,你会想把它放在某种使用Rails的方法中。

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

#=> 8000.9 
+0

这是一个更好的方法,尤其是处理美国的号码 –

0

有一个在方法没有建成,但这样的方法会做的伎俩

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

该方法返回一个小数,如果一个字符串传递,如果你想有一个浮动,使用”。 to_f“来代替。