[ASP.NET] 將不同貨幣格式字串轉型至 Decimal 型別

介紹當貨幣格式與本地文化貨幣格式不同時如需轉型 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);

 

參考資料


Decimal.ToString 方法 (String)

CultureInfo.NumberFormat 屬性

 

 


以上文章敘述如有錯誤及觀念不正確,請不吝嗇指教
如有侵權內容也請您與我反應~謝謝您 :)