Heim > Artikel > Backend-Entwicklung > Wie bleiben nachgestellte Nullen beim Marshaling von Floats in Go JSON erhalten?
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"}
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!