Schau mal in dir Doku zur avr-libc.

Es gibt funktionen, wie dtostrf und dtostre. Auf ausreichend große Puffer ist zu achen (wie bei sprintf auch). Wenn printf direkt nach UART drucken soll, dann nimmst du fprintf und erzeugst ein FILE-Objekt mit fdevopen, das als Argumente die Funktionszeiger der Ein-/Ausgaberoutinen bekommt.