Я нахожусь на стажировке, где проводится анализ строк, считанных из файла XML. В частности, строки являются представлениями десятичных чисел. Проблема возникает, когда я пытаюсь проанализировать десятичную строку, отформатированную иначе, чем те, которые имеют разделители запятых и десятичную точку. Например, способ, которым нации форматируют свои десятичные числа по-разному:
- Франция: 1 234 567,89 == 1 234 567,89
- Германия: 1,234,567,89 == 1 234 567,89
- Австралия: 1 234 567,89 == 1 234 567,89
Я почти уверен, что именно так эти страны могут представлять десятичные числа. Если не извините. Точка 1 234 567,89 может быть представлена многими способами.
Что я хотел бы сделать, так это убедиться, что любое строковое представление десятичного числа, которое я пытаюсь разобрать, должно получиться 1 234 567,89.
Я думал, что хорошим способом для этого было бы использование метода double.TryParse()
, но я не смог заставить его работать.
Вот что я получил в небольшом тестовом приложении:
double num;
Console.WriteLine(double.TryParse("1 234 567,89", NumberStyles.Any, CultureInfo.InvariantCulture.NumberFormat, out num).ToString());
Console.WriteLine(num.ToString());
Console.WriteLine(double.TryParse("1.234.567,89", NumberStyles.Any, CultureInfo.InvariantCulture.NumberFormat, out num).ToString());
Console.WriteLine(num.ToString());
Console.WriteLine(double.TryParse("1 234 567.89", NumberStyles.Any, CultureInfo.InvariantCulture.NumberFormat, out num).ToString());
Console.WriteLine(num.ToString());
Все, что я делаю, это проверяю, что TryParse
работает, а затем печатаю номер. В этом случае TryParse всегда выдает false. Значение false означает, что TryParse
перехватило FormatException
и, очевидно, не удалось преобразовать строку в двойное число.
Выглядит ли это правильно, или я просто запутался в том, что делаю?
У меня сложилось впечатление, что, сказав NumberStyles.Any
, это означает, что строка может быть в любой форме десятичного числа. У меня также сложилось впечатление, что высказывание CultureInfo.InvariantCulture.NumberFormat
возвращает информацию о форматировании чисел, которые являются культурно независимыми. Другими словами, он создаст десятичную форму вида 1 234 567,89.
Спасибо, что нашли время прочитать мою проблему. Любая помощь будет высоко ценится.