Преобразования числа в строку

Тема в разделе "Arduino & Shields", создана пользователем Makhonin, 9 сен 2012.

  1. Makhonin

    Makhonin Гик

    Добрый вечер! столкнулся с такой проблемой: есть переменная типа float. Ее значение нужно перевести в строку, соединить со строкой "S0_" и отправить в порт. То есть в порт должно отправиться, например: "S0_25.15". Как сделать преобразования float числа в строку?
     
  2. Makhonin

    Makhonin Гик

    Должна же быть какая-нибудь функция преобразования
     
  3. Unixon

    Unixon Оракул

    sprintf() ?
     
  4. Код (Text):
    float num = 15.25;
    char* msg;
    void setup()
    {
    Serial.begin(9600);
    sprintf(msg, "S0_%d", num);
    Serial.println(msg);
    }
    void loop()
    {
    }
    Проверяйте!
     
  5. Makhonin

    Makhonin Гик

    Я сделал так:
    Код (Text):
    int a = 125;
    String b;
    b = String(a);
     
  6. Makhonin

    Makhonin Гик

    Но все равно спасибо за еще один способ
     
  7. Код (Text):
    Я сделал так:
    Код:
     
    int a = 125;
    String b;
    b = String(a);
     
     
    А полностью код не можете привести?
     
  8. Makhonin

    Makhonin Гик

    Тут и так, по сути, уже весь код написан. Но только уж, чтобы все откомпилировалось:
    Код (Text):
    String s;
    int a;
    void setup() {
      a = 25;
      Serial.begin(9600);
    }
     
    void loop()
    {
      s = "S0_"+String(a);
      Serial.println(s);
      delay(100);
    }
     
  9. У вас же тип float, а не int в вопросе!
    Тогда уж так:
    Код (Text):
    String s;
    float a;
    void setup() {
      a = 25.77;
      Serial.begin(9600);
    }
     
    void loop()
    {
      s = "S0_"+String(a);
      Serial.println(s);
      delay(100);
    }
     
  10. iKarma

    iKarma Нуб

    Всем привет.

    Пытаюсь сделать преобразование из строки в число следующим образом:
    Код (Text):

    float hum = ((float)DHT11.humidity, 2);
    float temp = ((float)DHT11.temperature, 2);
    String result = String(hum) + "," + String(temp);
    Serial.print(result);
     
    На выходе получаю строку:
    Датчик работает корректно, в чём проблема?

    Заранее спасибо!
     
    Последнее редактирование: 23 май 2015
  11. X-Dron

    X-Dron Гик

    float hum = ((float)DHT11.humidity, 2);
    Вообще странная конструкция, не понятно что собираетесь сделать.
    Какой тип у членов класса .temperature и .humidity в библиотеке?
    Если float, то достаточно такого вывода
    Serial.print(DHT11.humidity, 2);
    Serial.print("," /t);
    Serial.println(DHT11.temperature, 2);

    если int с фиксированной точкой, скажем в 1 знак после запятой, то
    Serial.print(float(DHT11.humidity)/10, 1);
    Serial.print("," /t);
    Serial.println(float(DHT11.temperature)/10, 1);
     
    iKarma нравится это.
  12. geher

    geher Гуру

    Проблема в том, что контрукция
    float hum = ((float)DHT11.humidity, 2);
    никак не выполняет то, что задумано, а просто присваивает двойку (результат вычисления выражения ((float)DHT11.humidity, 2)), поскольку результатом выполнения оператора ',' (запятая) является последнее выражение в списке.

    Если я правильно понял, то задумано присваивание DHT11.humidity (кстати, какой у него тип?) переменной float, чтобы значение было с двумя знаками после запятой.

    Если предположить, что DHT11.humidity - это строка, которая char* (исхожу из фразы "преобразование из строки в число"), то можно так.
    Код (Text):
    Serial.print(String(DHT11.humidity).toFloat,2);
    Serial.print(",");
    Serial.print(String(DHT11.temperature).toFloat,2);
     
    Если же это String, то все еще проще:
    Код (Text):
    Serial.print(DHT11.humidity.toFloat,2);
    Serial.print(",");
    Serial.print(DHT11.temperature.toFloat,2);
     
    Если необходимо округлить до второго знака значение, хранимое во float, то
    float hum=round(DHT11.humidity.toFloat*100)/100
    (исхожу из того, что DHT11.humidity - это String).
    Естественно в силу особенностей обработки типа float может получиться не точно два знака после запятой, но число будет приближено к необходимому, а окончательная шлифовка картинки должна осуществляться при выводе.
     
    iKarma нравится это.
  13. iKarma

    iKarma Нуб

    Спасибо, разобрался :)