2014-06-11 504 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「來代替。