Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.92/13: Рейтинг темы: голосов - 13, средняя оценка - 4.92
0 / 0 / 0
Регистрация: 05.11.2019
Сообщений: 100
.NET 6

Input string was not in a correct format

10.08.2022, 19:37. Показов 2670. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый вечер.
Работаю с ардуино и мне нужно получить строку (по сути число в формате string) и перевести его в double. Но вот странно, что он мне показывает, что входная строка имеет некорректный формат: 'Input string was not in a correct format.'
Кусок кода с ардуино:
C
1
2
3
4
5
6
7
if (mySensor.accelUpdate() == 0)
        {
          aX = mySensor.accelX();
          aSqrt = mySensor.accelSqrt();
          Serial.println(String(aX));
         // delay(200);
        }
Если оставить println, то в ошибке будет светиться значение "-0.24\r", а если написать print - будет просто "-0.24".
Кусочек кода с C#:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
private void button4_Click(object sender, EventArgs e)
        {
            if (!serialPort1.IsOpen) serialPort1.Open();
            while (serialPort1.IsOpen)
            {
                buffer = " X "; count = 0;
                chart1.Series[0].Points.Clear();
                dataGridView1.Rows.Clear();
                serialPort1.Write("1");
                for (int i = 0; i < 100; i++)
                {
                    serialPort1.ReadLine();
                    a = Convert.ToString(serialPort1.ReadLine());
                    double c = Convert.ToDouble(a); //Double.Parse(a);
                    richTextBox5.AppendText(sent + buffer + "--> X - Axis" + Environment.NewLine);
                    richTextBox5.ScrollToCaret();
                    chart1.Series[0].Points.AddXY(i + 1, a);
                    label1.Text = "Count: " + Convert.ToString(i);
                    dataGridView1.Rows.Add();
                    dataGridView1.Rows[i].Cells[0].Value = i + 1;
                    dataGridView1.Rows[i].Cells[1].Value = a;
                }
                serialPort1.Close();
            }
        }
Я открываю дебаггер, там у меня значение "-0.24". Почему он не хочет конвертировать его в double? Помогите
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
10.08.2022, 19:37
Ответы с готовыми решениями:

Ошибка Input string was not in a correct format
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO; using...

Ошибка System.FormatException: Input string was not in a correct format
Разбираю пример из Шилдта, но он у меня почему-то не компиллируется: выдает ошибку System.FormatException: Input string was not in a...

Выдает ошибку в выражении: input string was not in a correct format
Помогите выдает ошибку в выражении! using System; class Program { static ulong F(int n) //нерекурсивный метод {

8
49 / 39 / 11
Регистрация: 24.07.2022
Сообщений: 117
10.08.2022, 19:43
Цитата Сообщение от Isaljack Посмотреть сообщение
Я открываю дебаггер, там у меня значение "-0.24". Почему он не хочет конвертировать его в double? Помогите
Может локаль русская? Тогда будет конвертировать только -0,24, но не -0.24. https://docs.microsoft.com/en-... ew=net-6.0
1
0 / 0 / 0
Регистрация: 05.11.2019
Сообщений: 100
10.08.2022, 20:00  [ТС]
Не, не в локали дело..(
Капец, эта ошибка тормозит работу. Мне нужно это значение использовать в вычислениях
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
11.08.2022, 07:34
Лучший ответ Сообщение было отмечено Isaljack как решение

Решение

Цитата Сообщение от Isaljack Посмотреть сообщение
Не, не в локали дело
А вы попробуйте:
C#
1
double c = double.Parse(a, CultureInfo.InvariantCulture);
Вдогонку: у вас на каждой итерации цикла считывается две строки, причем первая отбрасывается:
Цитата Сообщение от Isaljack Посмотреть сообщение
C#
1
2
serialPort1.ReadLine();
a = Convert.ToString(serialPort1.ReadLine());
Это так специально сделано?
1
548 / 355 / 120
Регистрация: 17.08.2014
Сообщений: 1,351
11.08.2022, 07:51
Потому что не нужно передавать строки, нужно делать протокол обмена и передавать байты, после этого и проблем с конвертацией не будет. Так как пакет будет стандартизирован. Это хорошо если на той стороне порта действительно ожидаемое устройство и оно в ожидаемом статусе, а если нет, то все посыпется, не тут, так в другом месте.
1
1 / 1 / 1
Регистрация: 03.12.2021
Сообщений: 5
11.08.2022, 10:09
Попробуй конвертировать в байты и разделять сообщение по разрядам. Кусок кода из моей программы, она другая конечно, но все же.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 string[] mass = new string[100];
                mass = GetSql();
                Console.WriteLine("Программа работает");
                while (true) //  ЦИКЛ
                {
                    Socket handler = listenSocket.Accept();
                    // получаем сообщение
                    StringBuilder builder = new StringBuilder();
                    int bytes = 0; // количество полученных байтов
                    byte[] data = new byte[256]; // буфер для получаемых данных
 
                    do
                    {
                        bytes = handler.Receive(data);
                        builder.Append(Encoding.Unicode.GetString(data, 0, bytes));
                    }
                    while (handler.Available > 0);
 
                    Console.WriteLine(DateTime.Now.ToShortTimeString() + ": " + builder.ToString());
1
0 / 0 / 0
Регистрация: 05.11.2019
Сообщений: 100
11.08.2022, 10:40  [ТС]
kolorotur, блин, а сработало же
По поводу считывания двух строк не обратил на это внимание. Спасибо)
Dan0lik, спасибо. Думаю, на будущее пригодится

Всем спасибо большое, низкий поклон!) Видимо, в самом деле проблема была в локали.
C#
1
double c = double.Parse(a, CultureInfo.InvariantCulture);
0
2394 / 1923 / 763
Регистрация: 27.07.2012
Сообщений: 5,567
11.08.2022, 13:33
Цитата Сообщение от Isaljack Посмотреть сообщение
Видимо, в самом деле проблема была в локали.
Уже говорили, но повторю: если надо работать именно с числами - не используй текстовые протоколы.
1
0 / 0 / 0
Регистрация: 05.11.2019
Сообщений: 100
12.08.2022, 12:18  [ТС]
Понял, спасибо. Делал работу на скорую руку, и, как видимо, не совсем грамотно)
Учту в следующий раз
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
12.08.2022, 12:18
Помогаю со студенческими работами здесь

Ошибка System.FormatException:"Input string was not in a correct format."
Помогите пожалуйста решить эту проблему, вроде все правильно Но на этом моменте ...

Ошибка System.FormatException: "Input string was not in a correct format."
Добрый день, не знаю, как исправить ошибку, столкнулся с ней при написании кода для решения задачи https://i.imgur .com/YqeVcBd.png(убрать...

Выдает ошибку "Input string was not in a correct format."
Нужно чтобы при вводе массива прорабатывал оба типа(int,string), но при запуске выдает ошибку &quot;Input string was not in a correct...

System.FormatException: "Input string was not in a correct format."
Найдите ошибку в коде, а то 20 минут чешу репу, понять всё не могу( После запуска кода, выдаёт ошибку в 26 строке. using System; ...

System.FormatException: "Input string was not in a correct format."
Преобразовываю массив string в массив int. У меня не работает, хотя делал идентичное задание на другом PC и там всё работало. ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
1С: Контроль уникальности заводского номера
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере документа выдачи шин для спецтехники с табличной частью. Данные берутся из регистра сведений, по которому настроено. . .
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
anaschu 22.03.2026
e7EYtONaj8Y Z4Tv2zpXVVo https:/ / github. com/ shumilovas/ med2. git
1С: Программный отбор элементов справочника по группе
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа. В качестве фильтра для отбора справочника служит группа номенклатуры. Отбор по наименованию группы. . .
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
1С: Программный отбор элементов справочника по значению перечисления
Maks 21.03.2026
Установка программного отбора элементов справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит значение перечислений. / / Событие "НачалоВыбора" реквизита на форме. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru