sprintf - printf con ceros a la izquierda en C
rellenar con ceros a la izquierda c# (1)
Tengo un número de punto flotante como 4917.24
. Me gustaría imprimirlo para que siempre tenga cinco caracteres antes del punto decimal, con ceros a la izquierda y luego tres dígitos después del lugar decimal.
Intenté printf("%05.3f", n)
en el sistema integrado que estoy usando, pero imprime *****
. ¿Tengo el especificador de formato correcto?
Su especificador de formato es incorrecto. Desde la página man de printf()
en mi máquina:
0
Un carácter cero ''0
'' que indica que se debe usar relleno cero en lugar de relleno en blanco. A ''-
'' anula ''0
'' si se usan ambos;Ancho de campo: una cadena de dígitos opcional que especifica un ancho de campo ; si la cadena de salida tiene menos caracteres que el ancho del campo, se rellenará en blanco a la izquierda (o derecha, si se ha proporcionado el indicador de ajuste a la izquierda) para compensar el ancho del campo (tenga en cuenta que un cero a la izquierda es una bandera, pero un cero incrustado es parte de un ancho de campo);
Precisión: un período opcional, ''
.
'', seguido de una cadena de dígitos opcional que proporciona una precisión que especifica el número de dígitos que aparecerán después del punto decimal, para los formatos e y f , o el número máximo de caracteres que se imprimirá a partir de una cadena; si falta la cadena de dígitos, la precisión se trata como cero;
Para su caso, su formato sería %09.3f
:
#include <stdio.h>
int main(int argc, char **argv)
{
printf("%09.3f/n", 4917.24);
return 0;
}
Salida:
$ make testapp
cc testapp.c -o testapp
$ ./testapp
04917.240
Tenga en cuenta que esta respuesta depende de que su sistema incorporado tenga una implementación de printf()
que cumpla con los estándares para estos detalles: muchos entornos integrados no cuentan con dicha implementación.