在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数据库中获取数据。 我得到十进制值和货币(如欧元,美元,波兰兹罗提)。 这似乎有效,但也许有更好的选择? 另外现在这是单线程应用程序,我在更改Thread.CurrentThread.CurrentCulture时进行全局更改,还是暂时直到我从方法返回?

带着敬意,

疯狂的男孩

您可以将所需的文化作为第一个参数传递给string.Format 。 这比每次更改当前线程更好。 您可能想要设置某种类型的地图或字典,从而为您创建从货币代码到文化代码的映射 – 这将大大减少此处的代码行数。

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

或者,如果您根据货币代码存储CultureInfo实例的地图,您将拥有:

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