Maison > développement back-end > Golang > Comment puis-je préserver la précision de la virgule flottante lors du marshaling JSON dans Go ?

Comment puis-je préserver la précision de la virgule flottante lors du marshaling JSON dans Go ?

Susan Sarandon
Libérer: 2024-11-29 19:20:12
original
1033 Les gens l'ont consulté

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

Préserver la précision des virgules flottantes dans le marshaling JSON

Dans Go, la fonction json.Marshal() supprime souvent les zéros de fin des nombres à virgule flottante pendant la sérialisation JSON. Cela peut être problématique si l'application consommatrice nécessite la précision totale de la valeur d'origine.

Pour résoudre ce problème, envisagez de définir un type de données personnalisé qui encapsule la valeur à virgule flottante. Voici un exemple :

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

Dans cette implémentation :

  • Le type PreservedFloat sert de wrapper autour d'un float64 standard.
  • La méthode MarshalJSON remplace la méthode par défaut Comportement de sérialisation JSON.
  • Si la valeur a une représentation entière (pas de partie fractionnaire), elle est formaté avec une décimale pour conserver le zéro final.
  • Sinon, la valeur est formatée sans spécifier de précision, ce qui lui permet de conserver toute sa précision.

En utilisant PreservedFloat, vous peut contrôler la représentation JSON de vos valeurs à virgule flottante, garantissant qu'elles conservent leur précision même après le marshaling.

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