2011-02-15 15 views
36

Tengo un número de coma 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.printf con ceros a la izquierda en C

Probé printf("%05.3f", n) en el sistema integrado que estoy usando, pero imprime *****. ¿Tengo el especificador de formato correcto?

Respuesta

48

Su especificador de formato es incorrecto. Desde la página printf() hombre en mi máquina:

0 Un cero '0' carácter que indica que relleno con ceros se debe utilizar en lugar de blanco-relleno. A '-' reemplaza '0' si se utilizan ambos;

Ancho del campo: Cadena de dígitos opcional que especifica campo ancho; 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 periodo opcional, '.', seguido de una cadena de dígitos opcional que proporciona una precisión que especifica el número de dígitos que aparecen después del punto decimal, por e y f formatos, o la número máximo de caracteres a imprimir desde una cadena; si falta la cadena de dígitos, la precisión se trata como cero;

Para su caso, el 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 está condicionada a su sistema embebido tener una implementación printf() es decir de normas compatible con estos detalles: muchos entornos integrados no tienen tienen dicha implementación.

+0

Gracias, veo el error que estaba cometiendo. Lo tengo trabajando en la PC, mi sistema embebido aún no formateado correctamente, tendrá que darle un vuelco. –

+0

Tenga en cuenta que Microsoft printf() aparentemente no es [compatible con los estándares] (https://msdn.microsoft.com/en-us/library/8aky45ct (v = vs.100) .aspx) al poner ceros a la izquierda en un flotante- número de punto – ulatekh

Cuestiones relacionadas