double.Parse генерирует исключение System.FormatException

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

double.Parse("198.222213745118", CultureInfo.CurrentUICulture);

CultureInfo.CurrentUICulture — это fr-FR. но это вызывает исключение типа FormatException.

Что может быть причиной?


person user2717436    schedule 17.09.2013    source источник
comment
198.222213745118 должно быть 198,222213745118 (, вместо .)?   -  person Alessandro D'Andria    schedule 17.09.2013
comment
Верно, но я думал, что это работа этого метода double.parse   -  person user2717436    schedule 17.09.2013
comment
используйте 1_   -  person sa_ddam213    schedule 17.09.2013
comment
Нет, он не может сделать это в полной общности. например 1234 — это одна тысяча двести тридцать четыре в Англии, немногим больше 1 во Франции.   -  person Bathsheba    schedule 17.09.2013
comment
Если у вас есть контроль над строкой, вы можете использовать Числовой десятичный разделитель   -  person Sayse    schedule 17.09.2013
comment
Итак, как я могу это сделать? Я имею в виду - эта строка читается из файла xml, и я получаю ее так же, как она есть (с ,), как я могу проанализировать ее, чтобы она удвоилась, когда моя культура - французская?   -  person user2717436    schedule 17.09.2013
comment
Спасибо, я использовал CultureInfo.InvariantCulture, и он отлично работает.   -  person user2717436    schedule 17.09.2013


Ответы (3)


Французский (т.е. fr-FR) использует запятую для обозначения начала десятичной части, а не точки. Они используют период для разделения тысяч.

person Bathsheba    schedule 17.09.2013
comment
Конечно, но по этой причине я отправил свою культуру на метод разбора. - person user2717436; 17.09.2013
comment
@ user2717436, культура должна соответствовать культуре элемента управления пользовательского интерфейса. - person Bathsheba; 17.09.2013
comment
Да, именно так, и тысячная часть есть только в письменном языке, как и в румынской культуре. double.Parse не будет заменять ., это вызовет исключение. - person Eduard Dumitru; 17.09.2013
comment
Итак, как я могу это сделать? Я имею в виду - эта строка читается из xml-файла, и я получил ее именно так (с разделителем ,). как я могу проанализировать его, чтобы он удвоился, зависит от моей культуры? - person user2717436; 17.09.2013
comment
Файл XML должен использовать определенный формат. Укажите язык и региональные параметры, формат которых соответствует формату, используемому в XML-файле. - person Klas Lindbäck; 11.02.2016

Я знаю, что этот вопрос старый, но мой ответ может помочь кому-то еще. Итак, это ответ:

double.Parse("198.222213745118", System.Globalization.NumberStyles.AllowDecimalPoint, System.Globalization.NumberFormatInfo.InvariantInfo);

вместо

double.Parse("198.222213745118", CultureInfo.CurrentUICulture);
person NutCracker    schedule 02.04.2016

Я предлагаю использовать Double.TryParse, а не .Parse, поскольку он безопаснее в использовании и гарантирует, что вы не получите никаких исключений при синтаксическом анализе.

Вот код для использования,

double answer = -1;
Double.TryParse("Value", out answer);

Теперь все, что вам нужно сделать, это выполнить условный оператор, который проверит, действительно ли он проанализировал строку.

person DevEstacion    schedule 17.09.2013
comment
Очень-очень плохая идея из-за двусмысленности. Например. что бы он сделал с 1234? - person Bathsheba; 17.09.2013