2016-09-19 95 views
1

我有將其從一個API調用獲得的並且被存儲在數據庫中作爲字符串純字符串值:轉換的BigDecimal字符串貨幣

#<BigDecimal:7fabd9ba9618,'0.4173E2',18(18)> 

這需要以某種方式轉換成貨幣值。

我希望這樣的工作,但它只是返回爲零。

v = BigDecimal.new("#<BigDecimal:7fabd9ba9618,'0.4173E2',18(18)>") 
return v.to_s('F') 

任何想法?

+1

「#」'在你的數據庫中!?你確定這不是['BigDecimal'](http://ruby-doc.org/stdlib/libdoc/bigdecimal/rdoc/BigDecimal.html)實例嗎? – Stefan

+0

我認爲你只需要第二個參數。也是一個字符串。所以你需要通過分割函數來提取第二個參數 –

+0

@Stefan - 有點奇怪 - 它是我數據庫中緩存的JSON數組的摘錄(最初來自API調用)。 – vectran

回答

1

第一:爲什麼那些BigDecimal的存儲在BigDecimal#inspect表示在DB?這是錯誤的,應該修復。

儘管格式似乎在ruby API中有記錄,但它可能不能保證在不同版本之間保持一致。

我會使用一個正則表達式解析出相關的部分,只是爲了確保我讀了正確的事情,並得到正確的錯誤時的格式不匹配:你有_String_`

match = big_decimal_as_string.match(/#<BigDecimal:[a-f0-9]+,'([0-9E\.]+)',\d+\(\d+\)>/) 
if match 
    BigDecimal.new(match[1]) 
else 
    raise "Could not parse #{big_decimal_as_string}" 
end 
+0

感謝您的優雅解決方案。你是對的,我已經重寫了架構,現在在數據庫中存儲爲小數點。 [注意自我 - 如果不容易;我可能做錯了] – vectran