在C#中将十进制或字符串转换为货币的最佳方法?

Mad*_*Boy 4 c# currency

我一直试图找到这取决于我的选择十进制/字符串转换为货币的最佳方式.

        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();
        }
   }
Run Code Online (Sandbox Code Playgroud)

这是好的方法,还是我可以做得更好?我从SQL数据库中获取数据.我得到十进制值和货币(如欧元,美元,波兰兹罗提).这似乎有效,但也许有更好的选择?此外,现在该是单线程aplication,我是做全球变化当我改变Thread.CurrentThread.CurrentCulture或只是临时的,直到我从这个方法返回?

带着敬意,

疯狂的男孩

Dav*_*d M 11

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

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

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

return string.Format(cultureMap[currencyCode], "{0:c}", varD);
Run Code Online (Sandbox Code Playgroud)

  • 虽然我们正在重构,但如果你将`CultureInfo`存储在一个字典中,你可以放弃只存储`NumberFormatInfo`,它可以从`CultureInfo`对象的`NumberFormat`属性访问,也可以实现`IFormatProvider`. (2认同)