INFO : La Clarification du spécificateur de Format « g » pour printf()

Exclusion de responsabilité du contenu obsolète de la base de connaissances

Cet article a été rédigé sur les produits pour lesquels Microsoft n’offre plus aucune prise en charge. Par conséquent, cet article est proposé « en l’état » et ne sera plus mis à jour.

Résumé


Dans Microsoft C, le format de sortie résultant du spécificateur de format « g » printf() ne correspond pas exactement au format de sortie résultant soit le spécificateur de format « e » ou « f ». La documentation indique que « g » utilisera le format « e » ou « f », selon ce qui est plus compact. Cela est vrai dans le sens du format général, mais il existe certaines différences.


La valeur de précision est interprétée différemment dans le format « g » dans le format de « f ». La documentation explique cette différence. La précision de « f » indique le nombre de chiffres après la virgule décimale. La précision de « g » spécifie le nombre maximal de chiffres significatifs affichés. L’exemple suivant illustre la différence décrite dans le résumé :

Exemple de Code

#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);
}
Les résultats du programme ci-dessus sont correctes, comme indiqué ci-dessous :

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
Propriétés

ID d'article : 43392 - Dernière mise à jour : 27 janv. 2017 - Révision : 1

Commentaires