Heim >Backend-Entwicklung >Golang >Wie konvertiere ich Go's Float64 in Strings mit fester Breite und Beibehaltung signifikanter Ziffern?
Konvertieren von Gleitkommazahlen in Zeichenfolgen mit fester Breite, die signifikante Ziffern erhalten
Frage:
Gibt es in Go eine Standardbibliotheksfunktion, die Gleitkommazahlen (float64) in umwandelt? Zeichenfolgen mit einer festen Breite, wobei die maximale Anzahl signifikanter Ziffern erhalten bleibt?
Antwort:
Während die Go-Standardbibliothek keine dedizierte Funktion für diesen Zweck bereitstellt, a Eine benutzerdefinierte Lösung kann implementiert werden, um die gewünschte Formatierung zu erreichen.
Der Ansatz beinhaltet eine Verzweigung basierend auf dem Wert der float64-Zahl. Für Zahlen größer oder gleich 1e12 wird ein wissenschaftliches Notationsformat verwendet. Für Zahlen kleiner als 1e12 wird ein reguläres Format verwendet.
In beiden Fällen wird eine vorläufige Formatierung durchgeführt, um die Anzahl der Bruchstellen zu bestimmen, die erforderlich sind, um in die gewünschte Breite von 12 Zeichen zu passen. Die endgültige Formatzeichenfolge wird dann anhand der berechneten Genauigkeit erstellt.
Codeausschnitt:
// format12 formats x to be 12 chars long. func format12(x float64) string { if x >= 1e12 { // Check to see how many fraction digits fit in: s := fmt.Sprintf("%.g", x) format := fmt.Sprintf("%%12.%dg", 12-len(s)) return fmt.Sprintf(format, x) } // Check to see how many fraction digits fit in: 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) }
Testfälle und Ausgabe:
fs := []float64{0, 1234.567890123, 0.1234567890123, 123456789012.0, 1234567890123.0, 9.405090880450127e+9, 9.405090880450127e+19, 9.405090880450127e+119} for _, f := range fs { fmt.Println(format12(f)) }
Ausgabe:
0.0000000000 0.1234567890 1234.5678901 123456789012 1.234568e+12 9405090880.5 9.405091e+19 9.40509e+119
Das obige ist der detaillierte Inhalt vonWie konvertiere ich Go's Float64 in Strings mit fester Breite und Beibehaltung signifikanter Ziffern?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!