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, используя заданные десятичные пальцы