Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
18 / 13 / 6
Регистрация: 04.04.2019
Сообщений: 827

Преобразовать переменную float со значением Nan в String

09.01.2023, 14:23. Показов 2034. Ответов 25
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток. Вопрос не совсем в теме с++.
Балуюсь арудино, а она вроде как работает на с++ и каком-то фреймворке.
Получаю данные с датчика. Не важно какого, пусть будет датчик температуры. Данные получаю в переменную типа float потому что могут быть дробными, с плавающей запятой. Но чтобы передать эти данные по http запросу, их нужно преобразовать в стринг. Это легко достигается таким образом:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
String get_all() {  
  const char* state;
  int temper;
  int vlag;
 
  float humidity = функция получения влажности();
  float temperature = функция получения температуры();
 
  if (функция получения статуса датчика == 0)                                               // Если датчик передает данные  
    {
    state = "OK";                                                          //  то запоминаем его как OK
    temper = temperature;
    vlag = humidity;
    }
 
  return String(state)+"+"+String(temper)+"+"+String(vlag);
    }
Тут проблем нет.
Но если датчик не работает, то float temperature получается NAN и если добавить проверку и оставить в таком виде:
C++
1
2
3
4
5
6
7
  else                                                                  // иначе
    {
    state = "NO";                                                          //  запоминаем его как NO
    temper = "Nan";                                             // или temper = temperature или temper = ""
    vlag = "Nan";
    }
  return String(state)+"+"+String(temper)+"+"+String(vlag);
То передается максимальное число в диапазоне, допустимое во float или 1 или выдает ошибку. Можно присвоить числовое значение, например ноль, но тогда будешь дергаться, вдруг температура реально ноль.
Поэтому хотелось бы получить в return какое-то строковое значение типа: "Нет данных" или "NAN"

Возможно эта тема должна быть в разделе Си, а не С++. Если это так, то надеюсь админы подкорректируют.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
09.01.2023, 14:23
Ответы с готовыми решениями:

Как преобразовать переменную string в переменную типа BigInteger на языке c#?
Как преобразовать переменную string в переменную типа BigInteger на языке c#? PlayerPrefs.GetString("scroreString") - содержит...

Как преобразовать char* в string и вывести переменную string на экран?
for (int k = 0; k < 10; k++) { int x = (int)rand() / RAND_MAX + rand() % 6 + 2; char *chars = new char; ...

Преобразовать из float в string
Скажите, пжл, какие существуют ф-ии для конвертации из float в string?

25
18 / 13 / 6
Регистрация: 04.04.2019
Сообщений: 827
10.01.2023, 00:41  [ТС]
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от SmallEvil Посмотреть сообщение
res += String("+") + (isnan(temperature) ? String("NAN" ) : String(temperature ));
Работает и думаю, что так пойдет.
Единственное - задумался над предложением округлить. И не получается. На вариант:
C++
1
res += String("+") + (isnan(temperature) ? String("  No data  " ) : String(RoundTo(temperature, -1)));
Ругается. Можно было бы заморочится опять с int, но тогда обрежет до целого числа. А было бы не плохо до десятых округлять.
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
10.01.2023, 01:27
С числами с плавающей точкой вообще тяжело.

Добавлено через 7 минут
Если просто отсечь все знаки после 10-ых, можно так
Code
1
2
целая   - int(x) 
десятая - int(x*10)%10
Добавлено через 5 минут
C++
1
2
    int integ = int(round(x*10))/10;
    int drob  = int(round(x*10))%10;
А вот так, примерно, округляется до 10-ых
1
18 / 13 / 6
Регистрация: 04.04.2019
Сообщений: 827
10.01.2023, 12:48  [ТС]
Цитата Сообщение от SmallEvil Посмотреть сообщение
С числами с плавающей точкой вообще тяжело.
Да, но ваш вариант работает
C++
1
2
3
4
5
6
7
8
String res;
  float humidity = dht.getHumidity();
  float temperature = dht.getTemperature();
 
res = (dht.getStatus() == 0) ? String("OK") : String("NO");
res += String("+") + (isnan(temperature) ? String("  No data  " ) : String(int(round(temperature*10))/10)+","+int(round(temperature*10))%10);
res += String("+") + (isnan(humidity) ? String("  No data  " ) : String(int(round(humidity*10))/10)+","+int(round(humidity*10))%10);
return res;
Странно, что вариант с RoundTo() не сработал.
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
10.01.2023, 14:36
Цитата Сообщение от DyadyaGe Посмотреть сообщение
Странно, что вариант с RoundTo() не сработал.
Может быть, что конструктор предусмотрен только для целых чисел, и перед конвертацией, опять происходит преобразование к целому типу.
0
18 / 13 / 6
Регистрация: 04.04.2019
Сообщений: 827
10.01.2023, 14:46  [ТС]
Цитата Сообщение от SmallEvil Посмотреть сообщение
Может быть, что конструктор предусмотрен только для целых чисел, и перед конвертацией, опять происходит преобразование к целому типу.
Специалисты по языку ардуино сказали, что такая функция не предусмотрена, есть только round()
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
10.01.2023, 15:48
Цитата Сообщение от DyadyaGe Посмотреть сообщение
Специалисты по языку ардуино
Это не язык, это среда. Язык все же С++.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
10.01.2023, 15:48

Преобразовать string в float
Добрый день, я только начинаю изучать python и столкнулась с такой проблемой. Подскажите как решить. from tkinter import* import...

Преобразовать string в float
Привет! Подскажите, пожалуйста, наиболее простой способ, как преобразовать значение типа string в float.

как преобразовать string в float
всем привет! подскажите, пожалуйста, как преобразовать string в double?

Преобразовать тип float в string
Есть такая цифирь "3453.45", которую флоат понимает правильно. Нужно эту циферку преобразовать в стринг, точно такой же. а...

Преобразовать переменную float к заданным целочисленным значениям
Надо сделать такие преобразования, чтобы получить int b=45 и int c = 10


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

Или воспользуйтесь поиском по форуму:
26
Ответ Создать тему
Новые блоги и статьи
Запустил конкурс "тем и промптов для текстовых квестов созданных почти чисто ИИ"
Adler 06.10.2026
Всем привет! За последние три-четыре дня я создал более 16 текстовых квестовых игр используя преимущественно по одному запросу к ИИ на игру. Мне так понравилось смотреть все ветки/ сцены во всех. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru