Arduino sprintf float не форматирование

у меня есть этот эскиз arduino,

char temperature[10];
float temp = 10.55;
sprintf(temperature,"%f F", temp);
Serial.println(temperature);

температура печатает вне как

? F

любые мысли о том, как отформатировать этот поплавок? Мне нужен символ строки.

2 ответов


из-за некоторых причин производительности %f не входит в реализацию Arduino sprintf(). Лучшим вариантом было бы использовать dtostrf() - вы преобразуете значение с плавающей запятой в строку c-стиля, подпись метода выглядит так:

char *dtostrf(double val, signed char width, unsigned char prec, char *s)

используйте этот метод, чтобы преобразовать его в строку C-стиля, а затем использовать sprintf, например:

char str_temp[6];

/* 4 is mininum width, 2 is precision; float value is copied onto str_temp*/
dtostrf(temp, 4, 2, str_temp);
sprintf(temperature,"%s F", str_temp);

вы можете изменить минимальную ширину и точность, чтобы соответствовать поплавку, который вы конвертируете.


как было указано ранее, поддержка Float не включена в sprintf на Arduino.

строковый класс

Arduino имеет свой собственный строка класса.

String value = String(3.14);

затем,

char *result = value.c_str();

ссылка на класс строки, ссылка выше

создает экземпляр класса String. Существует несколько версий создания строк из разных типов данных (т. е. их как последовательности символов), в том числе:

  • постоянная строка символов в двойных кавычках (т. е. массив символов)
  • один постоянный символ в одинарных кавычках
  • другой экземпляр объекта String
  • постоянное целое число или длинное целое число
  • постоянное целое или длинное целое число, используя указанную базу
  • целое число или переменной типа long
  • целочисленная или длинная целочисленная переменная, использующая указанную база
  • float или double, используя заданные десятичные пальцы