Лучший способ конвертировать десятичные или строковые значения в валюту в C #? - PullRequest
4 голосов
/ 19 января 2010

Я пытался найти лучший способ конвертировать десятичную / строковую в валюту в зависимости от моего выбора.

        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 или это просто временно, пока я не вернусь из метода?

Ответы [ 2 ]

11 голосов
/ 19 января 2010

Вы можете передать желаемую культуру в качестве первых параметров в string.Format. Это было бы лучше, чем вносить изменения в текущий поток каждый раз. Возможно, вы захотите настроить какую-то карту или словарь, который сделает преобразование из кода валюты в код культуры для вас - это значительно уменьшит количество строк кода здесь.

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

Или, если вы храните карту экземпляров CultureInfo по коду валюты, вы получите следующее:

return string.Format(cultureMap[currencyCode], "{0:c}", varD);
0 голосов
/ 19 января 2010
Convert.ToDecimal()
...