INFO: Klarstellung der Formatbezeichner "g" für printf()

Veralteter Haftungsausschluss für KB-Inhalte

Dieser Artikel wurde für Produkte geschrieben, für die Microsoft keinen Support mehr anbietet. Deshalb wird dieser Artikel im vorliegenden Zustand bereitgestellt und nicht mehr aktualisiert.

Zusammenfassung


Microsoft c entspricht das Ausgabeformat aus printf() Formatbezeichner "g" nicht genau das Ausgabeformat aus Formatbezeichner "e" oder "f". Die Dokumentation besagt, dass "g" die "f" oder "e" Format verwendet kompakter ist. Dies gilt im Sinne des allgemeinen Formats, jedoch bestehen einige Unterschiede.


Der Genauigkeitswert wird im Format "g" als "f" Format unterschiedlich interpretiert. Die Dokumentation erklärt diesen Unterschied. Die Genauigkeit für "f" gibt die Anzahl der Ziffern nach dem Dezimalkomma. Die Genauigkeit für "g" gibt die maximale Anzahl der Nachkommastellen gedruckt. Das folgende Beispiel veranschaulicht den Unterschied in der Zusammenfassung beschrieben:

Beispielcode

#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);
}
Die Ergebnisse des vorangehenden Programm sind korrekt, wie folgt:

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
Eigenschaften

Artikelnummer: 43392 – Letzte Überarbeitung: 16.01.2017 – Revision: 1

Feedback