Alineación de textos en TFT

No te ha funcionado porque no le has dado el espacio necesario al buffer. El buffer requiere 1 byte por cada número mas un byte extra para indicar que byte de terminación \0.
Un número como 123.45, son si cuentas 5 números, mas un punto decimal o sea 6 caracteres o bytes, mas un byte extra es decir 7 bytes.
Entonces un buffer de 7 es suficiente pero cuando usas un lcd yo siempre hago el buffer del tamaño de la linea y solo uso elementos temporales que me sirven para tareas intermedias del tamaño digamos mas justo.
Tu problema es fácil con enteros y mas complicado con decimales.
Con enteros usas %d o %4d para 4 digitos como 0000 a 9999 y si pones %5d sera de 00000 a 99999.
Ahora con decimales o numeros reales debes usar este truco.
Supongamos tu ejemplo 123.45 tiene 3 numeros enteros, 2 decmales pero 6 caracteres en total, entonces requieres de un array de 7 bytes

numero_decimal = 123.45;
char str[7], buffer[20];
dtostrf(numero_decimal, 6, 2, str);
sprintf(buffer,"%s", str);

Como verás hago el truco de pasar un float a cadena de char y luego lo formateo como una cadena fija
En el caso de los ESP tienes la suerte que tienen implementado el punto flotante entonces ahi puedes directamente poner

numero_decimal = 123.45;
buffer[20];
sprintf(buffer,"%5.2f", numero_decimal);

prueba tal vez deba ser 3.2f no me acuerdo ahora.

Con PlatformIO puedes agregarle a Arduino un comando al compilador que permite a cualquier arduino hacer esto mismo que te he dicho hacen nativamente los ESP.
Eso se debe a que los Arduino tienen deshabilitado el uso de esta librería por cuestión de tamaño de la Flash pero como uno maneja eso de acuerdo al proyecto. Es muy util disponer de dicho control.