Double.Parse для поддержки родного языка - PullRequest
2 голосов
/ 24 октября 2011

У меня есть значение 20,55 на немецком языке.
Когда я изменяю региональные настройки на США, после запуска этого кода значение отображается как 2055.0:

double d = Double.Parse("20,55",CultureInfo.CurrentCUCulture);

Почемуэто что?

Ответы [ 3 ]

4 голосов
/ 24 октября 2011

Потому что в США , - это разделитель тысяч, и он игнорируется?Точно так же, как в Германии (и в континентальной Европе) . - это разделитель тысяч, и он игнорируется?

В Германии вы пишете: 1.000,55.В США вы пишете: 1000,55 (и есть некоторые школы мысли, которые убирают ,, если раньше была одна цифра. Поэтому 1000,55 и 11 000,55).

Теперь, если вы хотите быть уверены, что ваша программаиспользует культуру de-DE, передавайте в качестве параметра везде

CurrentCulture culture = new CultureInfo("de-DE");

double d = double.Parse("20,55", culture);
3 голосов
/ 24 октября 2011

В США десятичный разделитель - ., а не ,.Если вы попытаетесь разобрать 20,55, он (по-видимому) будет игнорировать запятые как стандартные триплетные разделители (например, в 1,234,567.89), даже если во всех них нет трех цифр.

Еслиесли вы хотите проанализировать номер в европейском стиле, вам нужно проанализировать его с помощью параметра культуры в европейском стиле.

1 голос
/ 24 октября 2011

Это потому, что в качестве десятичного разделителя в США используется ., а не ,.

Если вы хотите избежать этой проблемы независимо от региональных настроек пользователя, вы можете написать метод расширения:

public static String ToRegionalNumber(this String str) {
    String regionalNb = str.Replace(",", NumberFormatInfo.CurrentInfo.NumberDecimalSeparator);
    regionalNb = regionalNb .Replace(".", NumberFormatInfo.CurrentInfo.NumberDecimalSeparator);
    return regionalNb ;
}

И вызывайте этот метод при работе с вашим номером:

double d = Double.Parse("20,55".ToRegionalNumber());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...