Heim >Backend-Entwicklung >Golang >Wie formatiere ich einen Go float64-Wert in eine Zeichenfolge mit fester Breite und maximal signifikanten Ziffern?

Wie formatiere ich einen Go float64-Wert in eine Zeichenfolge mit fester Breite und maximal signifikanten Ziffern?

Patricia Arquette
Patricia ArquetteOriginal
2024-12-03 18:31:10824Durchsuche

How to Format a Go float64 Value into a Fixed-Width String with Maximum Significant Digits?

So konvertieren Sie Float64 in eine Zeichenfolge mit fester Breite und maximal signifikanten Ziffern in Go

In Go, wenn Sie float64-Werte innerhalb eines festen Werts drucken In einer Breitentabelle ist es oft wünschenswert, so viele signifikante Ziffern wie möglich beizubehalten. Die Standardformatierung kann jedoch zu einem Präzisionsverlust führen, da bei großen Zahlen automatisch auf die wissenschaftliche Notation umgeschaltet wird.

Die Notwendigkeit einer benutzerdefinierten Formatierungslösung

Für Fälle, in denen Da sowohl die wissenschaftliche Schreibweise als auch die reguläre Form nicht akzeptabel sind, ist ein angepasster Formatierungsansatz erforderlich. Das Hauptaugenmerk sollte auf der Berechnung der optimalen Genauigkeit liegen, die in die angegebene Breite passt und gleichzeitig die höchstwertigen Ziffern beibehält.

Vorgeschlagene Lösung

Die folgende Implementierung bietet eine einfache Lösung:

<br>// format12 formatiert x mit 12 Zeichen long.<br>func format12(x float64) string {</p>
<pre class="brush:php;toolbar:false">if x >= 1e12 {
    s := fmt.Sprintf("%.g", x)
    format := fmt.Sprintf("%%12.%dg", 12-len(s))
    return fmt.Sprintf(format, x)
}

s := fmt.Sprintf("%.0f", x)
if len(s) == 12 {
    return s
}
format := fmt.Sprintf("%%%d.%df", len(s), 12-len(s)-1)
return fmt.Sprintf(format, x)

}

Diese Lösung verwendet einen zweistufigen Prozess:

  1. Bestimmung der Präzision:

    • Für Werte größer oder gleich 1e12 wird eine wissenschaftliche Schreibweise mit angemessener Genauigkeit verwendet.
    • Für kleinere Werte eine reguläre Form mit ausreichender Genauigkeit wird basierend auf der Länge des ganzzahligen Teils berechnet.
  2. Erstellen der Formatierung Zeichenfolge:

    • Basierend auf der berechneten Genauigkeit wird eine benutzerdefinierte Formatierungszeichenfolge erstellt, um die gewünschte feste Breite sicherzustellen.

Beispielverwendung und -ausgabe

Um die Funktionalität zu demonstrieren, betrachten wir einige Beispiele Werte:

<br>fs := []float64{0, 1234.567890123, 0.1234567890123, 123456789012.0, 1234567890123.0,</p>
<pre class="brush:php;toolbar:false">9.405090880450127e+9, 9.405090880450127e+19, 9.405090880450127e+119}

für _, f := Bereich fs {

fmt.Println(format12(f))

}

Ausgabe:

<br>0,000 0000000<br>0,1234567890<br>1234,5678901<br>123456789012<br>1,234568e 12<br>9405090880.5<br>9.405091e 19<br>9.40509e 119<br>

Diese Lösung bietet die gewünschte Formatierung mit fester Breite und behält gleichzeitig die höchstwertigen Ziffern bei, was eine klare und klare Darstellung ermöglicht Prägnante Anzeige von float64-Werten in verschiedenen Szenarien.

Das obige ist der detaillierte Inhalt vonWie formatiere ich einen Go float64-Wert in eine Zeichenfolge mit fester Breite und maximal signifikanten Ziffern?. 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