@Rasse

Почему не работает?

Я наверное сверхразум - но есть функция.
static double ParseNum(string data, string word)
        {
            var num = "";

            try
            {
                var ind = word != null ? data.IndexOf(word, StringComparison.OrdinalIgnoreCase) + word.Length : 0;
                var read = false;
                for (; ind < data.Length; ind++)
                {
                    if (char.IsDigit(data[ind]) || data[ind] == ',' || data[ind] == '.' || data[ind] == ' ')
                    {
                        if (data[ind] == ' ') continue;
                        num += data[ind];
                        read = true;
                    }
                    else if (read) break;
                }
                var one = double.Parse(num.Replace(".", ","));


                var two = double.Parse(num);
                Console.WriteLine("one" + one);

                Console.WriteLine("two" +two);
                return two;//double.Parse(num.Replace(".", ","));
            }
            catch (Exception)
            {
                Console.WriteLine("Exception");
                //Log.Debug("Не смог распознать число: " + num);
            }

            return 0;
        }

Она прекрасно отрабатывала на NET core 3.1 - но после переноса на WF C# net core 3.1
стала выдавать исключение -
input string was not in a correct format
Хотя по факту ничего не поменялось.
Данные в функцию прилетают в формате :
data=Hello 43.12
word=Hello
  • Вопрос задан
  • 331 просмотр
Решения вопроса 1
samodum
@samodum
Какой вопрос - такой и ответ
Необходимо проверить текущую локализацию системы.
В зависимости от неё (ru-RU или en-US, полный список здесь) точка и запятая в числе обрабатываются по-разному.
Соответственно, будет ошибка.
Проверьте, подав на вход не "43.12", а "43,12".
И, например, в en-US "43.12" выдаст ошибку, но "43.123" ошибки не даст, а выдаст ответ 43123

Вот здесь есть решения
https://stackoverflow.com/questions/11399439/conve...

double.Parse("52.8725945", System.Globalization.CultureInfo.InvariantCulture);
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
firedragon
@firedragon
Не джун-мидл-сеньор, а трус-балбес-бывалый.
Передавайте
CultureInfo(1033)
CultureInfo(1049)

При парсинге чисел причем проверяйте строку на наличие точки тогда 1033
в другом случае 1049
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы