I (probably) founded the reason here: http://www.nongnu.org/avr-libc/user-manual/group__avr__stdio.html#gaa3b98c0d17b35642c0f3e4649092b9f1

Quote

Since the full implementation of all the mentioned features becomes fairly large, three different flavours of vfprintf() can be selected using linker options. The default vfprintf() implements all the mentioned functionality except floating point conversions. A minimized version of vfprintf() is available that only implements the very basic integer and string conversion facilities, but only the # additional option can be specified using conversion flags (these flags are parsed correctly from the format specification, but then simply ignored). This version can be requested using the following compiler options:

-Wl,-u,vfprintf -lprintf_min

If the full functionality including the floating point conversions is required, the following options should be used:

-Wl,-u,vfprintf -lprintf_flt -lm

Question 1: Can I introduce the full vfprintf() functionality within the Arduino IDE?

Question 2: If the answer to the previous question is "no", how can I convert a float/double into a char array?

dtostrf() does the deed for "straight" floating point, and dtostre() (just above the dtostrf() in the link that ramo102 gave) does it for scientific notation. (That link was also given in the thread that ramo102 had previously shown us.)

// Make room for entire print line, however long you plan // to make it. char printBuffer[80];

// Width of floating point field includes places for // // The sign // One digit before the decimal point // The decimal point // Digits after decimal point (== precision) // (Don't forget that the buffer has to hold the // terminating zero byte.)

// Bottom line: The size of floatBuffer must be at least // precision+4. The "width" field in the call do // dtostrf should be at least precision plus 3 and at most // the size of floatBuffer minus 1 // dtostrf(x, precision+3, precision, floatBuffer);

// You could just print the raw value. (You might // have other Serial.print() statements to give it some // user-friendly context.) Serial.println(floatBuffer);

// Or you could use sprintf to create an entire line in a // different buffer. Then you could use Serial.print // or LiquidCrystal::print, or whatever, to emit // the whole enchilada in one statement. sprintf(printBuffer, "With %%.%df precision, x = %s", precision, floatBuffer); Serial.println(printBuffer);

// Width of scientific field includes places for // // The sign. // One decimal digit before the decimal point. // The decimal point. // Some digits ofter the decimal point (== precision). // The 'e' character for exponent. // The sign of the exponent. // Two places for the exponent value. // (Don't forget that the buffer has to hold the // terminating zero byte.)

// Bottom line: The size of floatBuffer must be at least // precision + 8 //