介紹當貨幣格式與本地文化貨幣格式不同時如需轉型 Decimal 的處理方法。
前言
今天要將貨幣字串轉型成 Decimal 型別時碰到轉型失敗的情況,一看之下發現貨幣的格式為 100.000,00 格式,使用 Decimal.Parse 進行轉型時預設是依照本身電腦設定的 CultureInfo 來進行轉型,以台灣的系統語系來說使用的貨幣格式為 100,000.00 ,所以在使用 Decimal.Parse("100.000,00") 時就會轉型失敗,以下記錄一下如何處理這種貨幣格式轉換的問題。
範例
首先建立一個不因文化特性而異的 CultureInfo 物件,再針對這個 CultureInfo 設定他的 NumberFormat 屬性,由於需要轉型的字串格式為 100.000,00 ,所以針對 NumberFormat 的 Separator 相關屬性要依據傳入格式設定,如下。
CultureInfo cultureInfo = CultureInfo.InvariantCulture.Clone() as CultureInfo;
cultureInfo.NumberFormat.CurrencyGroupSeparator = ".";
cultureInfo.NumberFormat.CurrencyDecimalSeparator = ",";
cultureInfo.NumberFormat.NumberGroupSeparator = ".";
cultureInfo.NumberFormat.NumberDecimalSeparator = ",";
之後再轉型的時候再將以上設定好的 CultureInfo 傳入 Parse 方法。
decimal money = decimal.Parse("100.000,00", cultureInfo);
還有一種做法是產生一個適用該貨幣格式的國家的文化特性,再將該國家的 NumberFormatInfo 傳入 Parse 方法即可。
NumberFormatInfo numberFormat = new CultureInfo("de", false).NumberFormat;
decimal money = decimal.Parse("100.000,00", numberFormat);
參考資料
以上文章敘述如有錯誤及觀念不正確,請不吝嗇指教
如有侵權內容也請您與我反應~謝謝您 :)