Arduino sprintf float not formatting

Mistergreen picture Mistergreen · Dec 25, 2014 · Viewed 65.2k times · Source

I have this arduino sketch,

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

temperature prints out as

? F

Any thoughts on how to format this float? I need it to be a char string.

Answer

Dinal24 picture Dinal24 · Dec 26, 2014

Due to some performance reasons %f is not included in the Arduino's implementation of sprintf(). A better option would be to use dtostrf() - you convert the floating point value to a C-style string, Method signature looks like:

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

Use this method to convert it to a C-Style string and then use sprintf, eg:

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);

You can change the minimum width and precision to match the float you are converting.