Heim >Backend-Entwicklung >Golang >Wie kann ich beim Marshaling von JSON in Go die Gleitkomma-Präzision beibehalten?

Wie kann ich beim Marshaling von JSON in Go die Gleitkomma-Präzision beibehalten?

Susan Sarandon
Susan SarandonOriginal
2024-11-29 19:20:12976Durchsuche

How Can I Preserve Floating-Point Precision When Marshaling JSON in Go?

Bewahrung der Gleitkommagenauigkeit beim JSON-Marshalling

In Go entfernt die Funktion json.Marshal() häufig nachgestellte Nullen aus Gleitkommazahlen während der JSON-Serialisierung. Dies kann problematisch sein, wenn die konsumierende Anwendung die volle Genauigkeit des ursprünglichen Werts erfordert.

Um dieses Problem zu lösen, sollten Sie erwägen, einen benutzerdefinierten Datentyp zu definieren, der den Gleitkommawert kapselt. Hier ist ein Beispiel:

type PreservedFloat float64

func (f PreservedFloat) MarshalJSON() ([]byte, error) {
    // Preserve trailing zeros in the JSON representation.
    if float64(f) == float64(int(f)) {
        return []byte(strconv.FormatFloat(float64(f), 'f', 1, 32)), nil
    }
    return []byte(strconv.FormatFloat(float64(f), 'f', -1, 32)), nil
}

In dieser Implementierung:

  • Der PreservedFloat-Typ dient als Wrapper um einen Standard-Float64.
  • Die MarshalJSON-Methode überschreibt den Standard JSON-Serialisierungsverhalten.
  • Wenn der Wert eine ganzzahlige Darstellung hat (keinen Bruchteil), ist dies der Fall mit einer Dezimalstelle formatiert, um die nachgestellte Null beizubehalten.
  • Andernfalls wird der Wert ohne Angabe einer Genauigkeit formatiert, sodass er seine volle Genauigkeit behält.

Durch die Verwendung von PreservedFloat können Sie kann die JSON-Darstellung Ihrer Gleitkommawerte steuern und sicherstellen, dass sie auch nach dem Marshalling ihre Präzision behalten.

Das obige ist der detaillierte Inhalt vonWie kann ich beim Marshaling von JSON in Go die Gleitkomma-Präzision beibehalten?. 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