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
Freigeben: 2024-12-03 18:31:10
Original
816 Leute haben es durchsucht

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>
<div class="code" style="position:relative; padding:0px; margin:0px;"><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)
Nach dem Login kopieren

}

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>
<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">9.405090880450127e+9, 9.405090880450127e+19, 9.405090880450127e+119}
Nach dem Login kopieren

für _, f := Bereich fs {

fmt.Println(format12(f))
Nach dem Login kopieren

}

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!

Quelle:php.cn
Vorheriger Artikel:Wie konstruiere ich eine time.Time-Instanz mit einem bestimmten Zeitzonenversatz in Go? Nächster Artikel:Was ist der Unterschied zwischen „go build“ und „go install“ und wo werden ausführbare Dateien installiert?
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
Neueste Artikel des Autors
Aktuelle Ausgaben
verwandte Themen
Mehr>
Beliebte Empfehlungen
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage