Heim  >  Artikel  >  Backend-Entwicklung  >  Warum verhält sich „fmt.Printf“ mit „%g“ und den Feldern „Breite/Präzision“ unerwartet?

Warum verhält sich „fmt.Printf“ mit „%g“ und den Feldern „Breite/Präzision“ unerwartet?

Susan Sarandon
Susan SarandonOriginal
2024-10-26 17:02:02239Durchsuche

Why Does `fmt.Printf` with `%g` and Width/Precision Fields Behave Unexpectedly?

fmt.Printf mit Breiten- und Präzisionsfeldern in %g verhält sich unerwartet

Beim Versuch, Floats mit einer konsistenten Breite mit fmt.Printf zu formatieren () verhält es sich möglicherweise nicht wie erwartet, wenn der Formatbezeichner %g sowohl mit Breiten- als auch mit Präzisionsfeldern verwendet wird.

Laut Dokumentation legt das Präzisionsfeld für %g die Anzahl der Gesamtziffern ohne führende Stellen fest Nullen. Der %g-Formatbezeichner weist jedoch einige einzigartige Verhaltensweisen auf, die verwirrend sein können.

Führende Nullen und Ziffernzählung:

  • Führende Nullen im Bruchteil sind nicht als Ziffern gezählt.
  • Nachgestellte Nullen nach Ziffern ungleich Null werden als Ziffern gezählt.

Beispiele:

  • fmt .Printf("%.4g", 0.12345) ergibt 0,1235.
  • fmt.Printf("%.4g", 0.012345) ergibt 0,01235.
  • fmt.Printf("%.4g" , 0,0012345) ergibt 0,001234.

Präzision und Breite:

  • Das Breitenfeld gibt die Mindestbreite an, einschließlich aller Dezimalstellen oder Exponenten.
  • Wenn die Anzahl der Ziffern die angegebene Breite überschreitet, wird das Breitenfeld ignoriert.

Ihr Fall:

In Ihrem Beispiel: Sie haben .9g verwendet, was eine Mindestbreite von 10 und insgesamt 9 Ziffern angibt. Es treten jedoch die folgenden Verhaltensweisen auf:

  • 0,0606060606060606: Erfordert 12 Ziffern, daher wird die Mindestbreite ignoriert.
  • 0,3333333333333333: Erfordert 11 Ziffern, daher wird die Mindestbreite ignoriert.
  • 0,05 und 0,4: Erfordern 9 Ziffern, die kleiner als die Mindestbreite sind, daher werden sie mit Leerzeichen aufgefüllt.
  • 0,1818181818181818: Erfordert 9 Ziffern nach dem Runden, daher wird die Mindestbreite ignoriert.

Das obige ist der detaillierte Inhalt vonWarum verhält sich „fmt.Printf“ mit „%g“ und den Feldern „Breite/Präzision“ unerwartet?. 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