Heim  >  Artikel  >  Backend-Entwicklung  >  Wie bleiben nachgestellte Nullen beim Marshaling von Floats in Go JSON erhalten?

Wie bleiben nachgestellte Nullen beim Marshaling von Floats in Go JSON erhalten?

Linda Hamilton
Linda HamiltonOriginal
2024-11-24 06:12:10913Durchsuche

How to Preserve Trailing Zeros When Marshaling Floats in Go JSON?

Nachgestellte Nullen in JSON-Marshalled-Gleitkommazahlen beibehalten

In Go entfernt die Funktion json.Marshal() häufig nachgestellte Nullen aus der Gleitkommazahl -Punktzahlen beim Rangieren. Dies kann in bestimmten Szenarien zu einem Präzisionsverlust führen.

Problem:

Beim Marshalling des Werts eines Go-Programms mit einer nachgestellten Null (z. B. 40,0), json.Marshal () gibt den Wert ohne die Null aus (z. B. 40). Dieses Verhalten kann problematisch sein, wenn externe Programme Gleitkommazahlen mit nachgestellten Nullen erwarten.

Lösung 1 (empfohlen): Verwenden Sie einen benutzerdefinierten Float-Typ

Definieren Sie einen benutzerdefinierten Float Geben Sie die Methode MarshalJSON() ein und implementieren Sie sie, um die JSON-Serialisierung zu steuern. Hier ist ein Beispiel:

type KeepZero float64

func (f KeepZero) MarshalJSON() ([]byte, error) {
    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 diesem benutzerdefinierten Typ konvertiert die MarshalJSON()-Methode den Float in einen String mit einer Dezimalstelle (wenn es sich um eine ganze Zahl handelt) oder behält alle Dezimalstellen bei (wenn es keine ganze Zahl ist). ganze Zahl).

Beispiel:

type Pt struct {
    Value KeepZero
    Unit  string
}

func main() {
    data, err := json.Marshal(Pt{Value: 40.0, Unit: "some_string"})
    fmt.Println(string(data), err)
}

Dieser Code gibt {"Value":40.0,"Unit":some_string"} aus, wobei die nachgestellte Null in der JSON-Ausgabe erhalten bleibt.

Das obige ist der detaillierte Inhalt vonWie bleiben nachgestellte Nullen beim Marshaling von Floats in Go JSON erhalten?. 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