Wie funktioniert fmt.Printf mit Breiten- und Präzisionsfeldern in %g?
Verhalten von fmt.Printf mit Breiten- und Präzisionsfeldern in %g g kann verwirrend sein. Um es zu verstehen, müssen wir die Dokumentation klären.
Die folgende Aussage in der Dokumentation ist besonders wichtig:
precision sets the number of places after the decimal, if appropriate, except that for %g/%G it sets the total number of digits.
In dieser Aussage bezieht sich „es“ auf Präzision, nicht auf Breite. Dies bedeutet, dass während die Breite die minimale Feldbreite angibt, die Genauigkeit die Gesamtzahl der angezeigten Ziffern ohne führende Nullen angibt.
Wenn wir beispielsweise 123,45 mit fmt.Printf("%.4g") formatieren, wird die Ergebnis ist 123,5. Dies liegt daran, dass die Genauigkeit auf 4 eingestellt ist und 123,5 4 Ziffern hat (ohne Dezimalpunkt).
Wenn jedoch führende Nullen vorhanden sind, wird das Verhalten komplexer. Führende Nullen zählen nicht als Ziffern und werden nicht entfernt, wenn weniger als 4 davon vorhanden sind. Wenn wir beispielsweise 0,00012345 mit fmt.Printf("%.4g") formatieren, ist das Ergebnis 0,0001234. Dies liegt daran, dass die Genauigkeit auf 4 eingestellt ist und 0,0001234 4 Ziffern hat (ohne Dezimalpunkt und führende Nullen).
Da wir nun verstehen, wie sich die Präzision verhält, können wir das Breitenfeld untersuchen. Breite gibt die Mindestbreite des Feldes an, einschließlich der Dezimalstelle und etwaiger Exponenten. Wenn der formatierte Wert mehr Ziffern als die angegebene Breite hat, wird er über die Breite hinausgehen. Allerdings hat die Präzision Vorrang, daher muss der Wert zunächst die Präzisionsanforderung erfüllen.
In Ihrem Beispiel geben Sie .9g an, was insgesamt 9 Ziffern (ohne führende Nullen) und eine Mindestbreite von 10 bedeutet , einschließlich Dezimalpunkt und etwaiger Exponenten. Lassen Sie uns jeden Wert einzeln untersuchen:
Dies erklärt die unerwarteten Breiten, die Sie beobachtet haben.
Das obige ist der detaillierte Inhalt vonWie funktioniert die Präzision mit der Breite im %g-Formatbezeichner von fmt.Printf?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!