aufbewahren die nachverfolgenden Zeros in JSON Marshalled Floating-Punkt-Nummern
In go, die Funktion json.marshal (), streift häufig die Trailing-Zulten von Floating-Punkt-Nummern während des Marshallens. Dies kann in bestimmten Szenarien zum Präzisionsverlust führen.
Problem:
Wenn das Markenwert eines GO -Programms mit einem nachfolgenden Nullwert (z. B. 40.0), json.marshal () den Wert ohne den Wert ausgibt, ohne den Nullpunkt ausgibt (E., 40). Dieses Verhalten kann problematisch sein, wenn externe Programme mit nachfolgenden Zeros Floating-Punkt-Nummern erwarten.
Lösung 1 (empfohlen): Verwenden Sie einen benutzerdefinierten Float type
einen benutzerdefinierten Float-Typ und implementieren Sie die Marschhaljson () -Methode, um die JSON-Serialisierung zu kontrollieren. 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 mit einem Dezimalort (wenn es sich um eine ganze Nummer handelt) oder bewahrt alle Dezimalstellen (wenn es keine ganze Nummer ist). Wert KeepZero Einheitssaite } func main () { Daten, err: = json.marshal (pt {value: 40.0, Einheit: "slow_string"}) fmt.println (String (Daten), ERR) }
Dieser Code gibt {"value": 40.0, "Einheit": "seltsstring"} & lt; nil & gt;, die nachverfolgende Null in der JSON -Ausgabe erhalten.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3