Printf variable número de decimales en flotación

Encontré un formato interesante para imprimir cadenas de longitud fija no terminadas como esta:

char newstr[40] = {0}; sprintf(newstr,"%.*s", sizeof(mystr), mystr); 

Así que creo que tal vez haya alguna manera bajo el comando printf para imprimir un número flotante …

“% 8.2f”

tener la capacidad de elegir el número de decimales con número entero.

Algo como esto:

 sprintf(mystr, "%d %f", numberofdecimals, floatnumbervalue) 

EDITAR – Solución:
(para redondear y borrar un número flotante a la precisión deseada).

 int precision = 2; char kolf[16] = {0}; sprintf(kolf, "%8.*f", precision, mystruct.myfloat); float kol = atof(kolf); 

También puede usar ".*" Con puntos flotantes, consulte también http://www.cplusplus.com/reference/cstdio/printf/ (se refiere a C ++, pero los especificadores de formato son similares)

.number : para los especificadores a, A, e, E, f y F: este es el número de dígitos que se imprimirán después del punto decimal (por defecto, esto es 6).

. * : La precisión no se especifica en la cadena de formato, sino como un argumento de valor entero adicional que precede al argumento que debe formatearse.

Por ejemplo:

 float floatnumbervalue = 42.3456; int numberofdecimals = 2; printf("%.*f", numberofdecimals, floatnumbervalue); 

Salida:

 42.35 

También puede usar el asterisco, tanto para el ancho del campo como para la precisión:

 printf("%*.*f\n", myFieldWidth, myPrecision, myFloatValue); 

Ver, por ejemplo, esta referencia .