Heim > Backend-Entwicklung > Golang > Wie konvertiere ich Go's Float64 in Strings mit fester Breite und Beibehaltung signifikanter Ziffern?

Wie konvertiere ich Go's Float64 in Strings mit fester Breite und Beibehaltung signifikanter Ziffern?

DDD
Freigeben: 2024-12-05 16:34:11
Original
396 Leute haben es durchsucht

How to Convert Go's Float64 to Fixed-Width, Significant-Digit-Preserving Strings?

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)
}
Nach dem Login kopieren

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))
}
Nach dem Login kopieren

Ausgabe:

0.0000000000
0.1234567890
1234.5678901
123456789012
1.234568e+12
9405090880.5
9.405091e+19
9.40509e+119
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage