INFO: Aclaración del especificador de formato "g" para printf()

Declinación de responsabilidades del contenido retirado de KB

Este artículo trataba sobre los productos para los cuales Microsoft ya no ofrece soporte técnico. Por lo tanto, este artículo se ofrece "tal cual" y ya no se actualizará más.

Resumen


Microsoft C, el formato de salida resultante del especificador de formato "g" de printf() no coincidir exactamente con el formato de salida resultante de especificador de formato "e" o "f". La documentación afirma que "g" utilizará el formato de la "f" o la "e", el que sea más compacto. Esto es cierto en el sentido del formato general, pero existen algunas diferencias.


El valor de precisión se interpreta de forma diferente en formato "g" de formato "f". Esta diferencia explica en la documentación. La precisión para "f" especifica el número de dígitos después del punto decimal. La precisión para "g" especifica el número máximo de dígitos significativos que imprime. En el ejemplo siguiente se muestra la diferencia que se describe en el resumen:

Código de ejemplo

#include <stdio.h>
void main (void)
{
double x = 2.0/3.0; /* 0.666... */
double y;

y = 6.0 + x;
printf ("%.4g\n", y);
printf ("%.4f\n", y);
printf ("%.4e\n\n", y);

y = 66.0 + x;
printf ("%.4g\n", y);
printf ("%.4f\n", y);
printf ("%.4e\n\n", y);

y = 666.0 + x;
printf ("%.4g\n", y);
printf ("%.4f\n", y);
printf ("%.4e\n\n", y);

y = 6666.0 + x;
printf ("%.4g\n", y);
printf ("%.4f\n", y);
printf ("%.4e\n\n", y);

y = 66666.0 + x;
printf ("%.4g\n", y); /* switches to "e" notation here */
printf ("%.4f\n", y);
printf ("%.4e\n\n", y);
}
Los resultados del programa anterior son correctos, como se muestra a continuación:

6.667
6.6667
6.6667e+000

66.67
66.6667
6.6667e+001

666.7
666.6667
6.6667e+002

6667
6666.6667
6.6667e+003

6.667e+004
66666.6667
6.6667e+004
Propiedades

Id. de artículo: 43392 - Última revisión: 17/01/2017 - Revisión: 1

Comentarios