préserver les zéros de traîne dans json les nombres de point flottants maréchalais
dans go, la fonction json.marshal () dépouille souvent les zéros de traîne à partir de nombres à point flottants pendant le marshalling. Cela peut entraîner une perte de précision dans certains scénarios.
Problème:
Lors de la valeur d'un programme GO avec une valeur de fin (par exemple, 40.0). Ce comportement peut être problématique si les programmes externes s'attendent à des numéros à virgule flottante avec des zéros traînants.
Solution 1 (recommandé): Utilisez un type de flotteur personnalisé
Définissez un type de flotteur personnalisé 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 }
Dans ce type personnalisé, la méthode marshaljson () convertit le flotteur en une chaîne avec une décimale (si c'est un numéro entier) ou préserve tous les places décimales (si ce n'est pas un numéro entier). Valeur keepzero Chaîne unitaire } func main () { données, err: = json.marshal (pt {valeur: 40.0, unité: "some_string"}) fmt.println (String (data), err) }
Ce code sortira {"Value": 40.0, "Unit": "Some_String"} & lt; nil & gt;, préservant le zéro de fuite dans la sortie JSON.
Clause de non-responsabilité: Toutes les ressources fournies proviennent en partie d'Internet. En cas de violation de vos droits d'auteur ou d'autres droits et intérêts, veuillez expliquer les raisons détaillées et fournir une preuve du droit d'auteur ou des droits et intérêts, puis l'envoyer à l'adresse e-mail : [email protected]. Nous nous en occuperons pour vous dans les plus brefs délais.
Copyright© 2022 湘ICP备2022001581号-3