2015-09-20 126 views
0

如何將美元轉換爲美分貨幣寶石如何將美元轉換爲美分貨幣寶石

我的數據庫中有很多種貨幣類型。

想我在我的數據庫

  • 量有這3個項目:100,貨幣:NTD
  • 量:100,幣種:USD
  • 量:100,貨幣:日元

Then

Money.new(100, :NTD),結果NTD會是1美元,但實際上它應該是100 dol拉爾斯。

由於在USD

然而,

Money.new(100, :JPY),結果卻100 dollars對日圓,這是我的期望。

我該如何處理這種情況。無法讓我的用戶輸入100美元以NTD貨幣兌換1美元。

在金額字段中,我想只保存美元單位的數字。

但是,這個貨幣寶石似乎只接受cents作爲它的輸入。

有沒有什麼好的做法來解決我的問題。

+0

您能否將用戶提供金額乘以100? –

+0

所以我必須寫'if else'條件,如果用戶選擇USD或TWD,我應該乘以100,如果'JPY'我不需要乘以'100'。這些會增加我的應用程序的複雜性。容易產生新的錯誤,我發現是否有更優雅的解決方案T_T – newBike

回答

0

這是我目前的解決方案,但是我認爲它味道不好

我希望有一些解決方案可以擊敗我目前的解決方法

CurrencyUtil.money_to_target_currency(價格,from_currency,to_currency)

LIB/currency_util.rb

module CurrencyUtil 

    def self.dollar_to_cents(amount, raw_currency) 
    currency = raw_currency.upcase.to_sym 
    if [:TWD, :USD].include? currency 
     cents = amount*100 
    elsif [:JPY] 
     cents = amount 
    end 
    return cents 
    end 

    def self.money_to_target_currency(amount_in_dollar, from_currency, to_currency) 
    cents = dollar_to_cents(amount_in_dollar, from_currency) 
    Money.new(cents, from_currency).exchange_to(to_currency) 
    end 

end 
+0

如何在Money上配置不使用美分的方法? – hainguyen

0

如果採取貨幣寶石一看,在/config/currency_iso.json

{ 
    "Jpy": { 
    "priority": 6, 
    "iso_code": "JPY", 
    "name": "Japanese Yen", 
    "symbol": "¥", 
    "alternate_symbols": ["円", "圓"], 
    "subunit": null, 
    "subunit_to_unit": 1, 
    "symbol_first": true, 
    "html_entity": "¥", 
    "decimal_mark": ".", 
    "thousands_separator": ",", 
    "iso_numeric": "392", 
    "smallest_denomination": 1 
    } 
} 

你會看到

"subunit_to_unit": 1 

所以在這種情況下,你應該重寫日元和新臺幣貨幣與

"subunit_to_unit": 100   

這是我在/config/initializers/money.rb下的示例代碼

Money::Currency.register({ 
    "priority": 6, 
    "iso_code": "JPY", 
    "name": "Japanese Yen", 
    "symbol": "¥", 
    "alternate_symbols": ["円", "圓"], 
    "subunit": "Sen", 
    "subunit_to_unit": 100, 
    "symbol_first": true, 
    "html_entity": "¥", 
    "decimal_mark": ".", 
    "thousands_separator": ",", 
    "iso_numeric": "392", 
    "smallest_denomination": 1 
}) 

您可以在這裏添加更多貨幣。希望這對你有所幫助。

0

該死的,這花了我很長時間才弄清楚。真棒寶石,但有同樣的問題。這是我的解決方案:

# multiply amount to convert by the subunit for currency 
amount = amount * Money::Currency.new(from_symbol).subunit_to_unit 
amount_exchanged = Money.new(amount, from_symbol).exchange_to(to_symbol) 
相關問題