Heim  >  Artikel  >  Backend-Entwicklung  >  Wie funktioniert die Präzision mit der Breite im %g-Formatbezeichner von fmt.Printf?

Wie funktioniert die Präzision mit der Breite im %g-Formatbezeichner von fmt.Printf?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-10-26 12:23:29243Durchsuche

How does precision work with width in fmt.Printf's %g format specifier?

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:

  • 0,0606060606060606: 9 Ziffern ohne führende Nullen sind 0,0606060606, was bereits 12 Zeichen breit ist und die Mindestbreite von 10 überschreitet.
  • 0,3333333333333333: Ähnlich wie Vorheriger Wert, 9 Ziffern ohne führende Nullen sind 0,333333333, was einer Breite von 11 Zeichen entspricht und die Mindestbreite von 10 überschreitet.
  • 0,05: 9 Ziffern ohne führende Nullen sind 0,05, was weniger als die Mindestbreite von 10 ist. Es wird mit 6 Leerzeichen aufgefüllt, um die Mindestbreite zu erreichen.
  • 0,4: Ähnlich wie beim vorherigen Wert betragen 9 Ziffern ohne führende Nullen 0,4, was weniger als die Mindestbreite von 10 ist. Es wird mit aufgefüllt 6 Leerzeichen, um die Mindestbreite zu erreichen.
  • 0,1818181818181818: 9 Ziffern ohne führende Nullen ergeben 0,181818182, was auf Rundung zurückzuführen ist. Es überschreitet die Mindestbreite von 10 mit 11 Zeichen.

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn