Как преобразовать английский десятичный в испанский десятичный, используя глобализацию в C # - PullRequest
3 голосов
/ 07 февраля 2011

я использую Visual Studio 2008. Мой настольный компьютер работает в разных региональных настройках.

в моем коде у меня есть десятичные числа в строковых переменных в английском формате, я хочу преобразовать их в десятичные переменные, используя Convert.ToDecimal() с региональными настройками как "Испанский (Эквадор).

, когда я делаю следующее:

string myNum = "0.04";  
decimal myDec = Convert.ToDecimal(myNum); // here im getting 4 instead of 0,04

, когда я использовал,

Convert.ToDecimal(myNum, new CultureInfo("en-US")); // i got 0.04, but i want 0,04

я не могу добавить новыйCultureInfo("en-Us") для каждого оператора, потому что я использовал операторы преобразования более 100 раз.

как мне этого добиться. Пожалуйста, помогите ??

Ответы [ 2 ]

2 голосов
/ 07 февраля 2011

Вместо того, чтобы создавать новую культуру каждый раз, было бы лучше использовать CultureInfo.InvariantCulture - и я бы лично использовал decimal.Parse или decimal.TryParse вместо Convert.ToDecimal.Просто мои личные предпочтения, хотя.IIRC они действительно отличаются только с точки зрения обработки нулевого ввода.

Однако, если вы просто возражаете против включения этого в ваш код каждый раз, самым простым решением было бы написать собственный вспомогательный метод и вызвать что .Например:

public static decimal ParseDecimalInvariant(string text)
{
    return decimal.Parse(text, CultureInfo.InvariantCulture);
}

Кроме того, я надеюсь, что у вас на самом деле нет строковых значений в вашем коде.Если у вас есть строки, представляющие числа, просто замените их на литералы!

decimal myNum = 0.04m;

Это намного лучше, чем анализ во время выполнения:)

1 голос
/ 07 февраля 2011

Я считаю, что правильный ответ здесь будет включать изменения кода.Вы можете изменить культуру приложения, но IMO неверен, поскольку он переопределяет пользовательские настройки отображения и т. Д.

Обычно вы бы выбросили требуемую культуру, которую code использует в статическое полеи передавайте эту культуру для каждого бита вашего кода, который интерпретирует строковый литерал system .В ваших случаях, поскольку литералы кода представлены в английском формате, вы можете каждый раз передавать CultureInfo.InvariantCulture и экономить некоторые усилия.

Да, это будет 100 изменений кода;честно говоря: жестко.

...