Maison > développement back-end > Golang > Comment conserver les zéros de fin lors du marshaling des flotteurs dans Go JSON ?

Comment conserver les zéros de fin lors du marshaling des flotteurs dans Go JSON ?

Linda Hamilton
Libérer: 2024-11-24 06:12:10
original
963 Les gens l'ont consulté

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

Conserver les zéros de fin dans les nombres à virgule flottante marshalés JSON

Dans Go, la fonction json.Marshal() supprime souvent les zéros de fin du flottant -numéros de points lors du triage. Cela peut entraîner une perte de précision dans certains scénarios.

Problème :

Lors du regroupement de la valeur d'un programme Go avec un zéro final (par exemple, 40,0), json.Marshal () affiche la valeur sans le zéro (par exemple, 40). Ce comportement peut être problématique si des programmes externes attendent des nombres à virgule flottante avec des zéros à droite.

Solution 1 (recommandée) : utiliser un type flottant personnalisé

Définir un flottant personnalisé tapez et implémentez la méthode MarshalJSON() pour contrôler la sérialisation JSON. Voici un exemple :

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
}
Copier après la connexion

Dans ce type personnalisé, la méthode MarshalJSON() convertit le float en une chaîne avec une décimale (s'il s'agit d'un nombre entier) ou conserve toutes les décimales (s'il ne s'agit pas d'un nombre entier). nombre entier).

Exemple :

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)
}
Copier après la connexion

Ce code génère {"Value":40.0,"Unit":"some_string"} , en préservant le zéro final dans la sortie JSON.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal