2010-01-19 64 views
4

我一直在試圖找到最好的方式來將十進制/字符串轉換爲貨幣取決於我的選擇。在C#中將十進制或字符串轉換爲貨幣的最佳方式是什麼?

 public static string returnWaluta(string varS, string varSymbol) { 
     decimal varD = decimal.Parse(varS); 
     if (varSymbol == "EUR") { 
      Thread.CurrentThread.CurrentCulture = new CultureInfo("fr-FR", false); 
      return String.Format("{0:c}", varD); 
     } else if (varSymbol == "PLN") { 
      Thread.CurrentThread.CurrentCulture = new CultureInfo("pl-PL", false); 
      return String.Format("{0:c}", varD); 
     } else if (varSymbol == "USD") { 
      Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US", false); 
      return String.Format("{0:c}", varD); 
     } else { 
      // Not handled currency 
      MessageBox.Show(varSymbol); 
      return varS.ToString(); 
     } 
    } 
    public static string returnWaluta(decimal varS, string varSymbol) { 
     if (varSymbol == "EUR") { 
      Thread.CurrentThread.CurrentCulture = new CultureInfo("fr-FR", false); 
      return String.Format("{0:c}", varS); 
     } else if (varSymbol == "PLN") { 
      Thread.CurrentThread.CurrentCulture = new CultureInfo("pl-PL", false); 
      return String.Format("{0:c}", varS); 
     } else if (varSymbol == "USD") { 
      Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US", false); 
      return String.Format("{0:c}", varS); 
     } else { 
      // Not handled currency 
      MessageBox.Show(varSymbol); 
      return varS.ToString(); 
     } 
    } 

這是好的方法還是我可以做得更好?我從SQL數據庫中獲取數據。我獲得十進制值和貨幣(如EUR,USD,PLN)。這似乎工作,但也許有更好的選擇?也是現在,這是單線程應用程序,我是否在改變Thread.CurrentThread.CurrentCulture時進行全局更改,還是隻是暫時的,直到我從方法返回?

與問候,

MadBoy

+3

它傷害了我的眼睛! – 2010-01-19 12:40:34

回答

11

你可以通過你想在文化作爲第一個參數string.Format。這比每次改變當前線程都好。您可能需要設置某種映射或字典,以便從貨幣代碼映射到您的文化代碼 - 這將大大減少此處的代碼行數。

return string.Format(new CultureInfo(map[currencyCode], false), "{0:c}", varD); 

或者,如果你存儲地圖的CultureInfo實例對貨幣代碼,你有這樣的:

return string.Format(cultureMap[currencyCode], "{0:c}", varD); 
+0

+1,不需要在線程上設置CurrentCulture,這會在OP代碼中消除*巨大*的重複量。 – 2010-01-19 12:39:30

+1

您可能想要存儲實際的'CultureInfo'實例而不是它們的名稱。 – SLaks 2010-01-19 12:42:21

+0

是的,甚至更好 - 將編輯 – 2010-01-19 12:42:43

相關問題