"Si un ouvrier veut bien faire son travail, il doit d'abord affûter ses outils." - Confucius, "Les Entretiens de Confucius. Lu Linggong"
Page de garde > La programmation > Comment le champ de précision fonctionne-t-il réellement avec « %g » dans « fmt.Printf » ?

Comment le champ de précision fonctionne-t-il réellement avec « %g » dans « fmt.Printf » ?

Publié le 2024-11-08
Parcourir:883

How Does the Precision Field Actually Work with `%g` in `fmt.Printf`?

Comportement inattendu de fmt.Printf avec les champs de largeur et de précision pour %g

Comprendre la documentation ambiguë

La documentation des champs de formatage de fmt.Printf pour les valeurs à virgule flottante indique que :

"Pour les valeurs à virgule flottante, la largeur définit la largeur minimale du field
et la précision définit le nombre de décimales après la virgule, si
approprié, sauf que pour %g/%G, il définit le nombre total de chiffres."

La partie déroutante réside dans le utilisation de "ça" dans la dernière phrase. Il fait en fait référence à la « précision », et non à la « largeur ».

Le véritable comportement de %.9g

Contrairement à l'intuition selon laquelle %.9g devrait produire un total de 9 chiffres significatifs, il ne considère en fait que les chiffres après la virgule décimale.

Par exemple, 123456.789 sera formaté en 123.4e 03 car %.9g tronque efficacement tous les zéros non significatifs.

À l'inverse, 0.0000012345 sera formaté en 1.2345e-06 car %.9g prend en compte tous les chiffres significatifs après la virgule décimale.

L'impact de largeur et précision

Le champ largeur spécifie la largeur minimale de l'intégralité de la chaîne formatée, y compris le point décimal et exposant (le cas échéant).

Le champ de précision, comme décrit ci-dessus, définit le nombre de chiffres significatifs après le point décimal.

Pour %g, le champ de précision remplace la largeur champ. Cependant, si la chaîne formatée dépasse la largeur spécifiée, elle s'étendra au-delà de la largeur spécifiée.

Explication de l'exemple donné

Rappelez-vous que l'exemple implique le formatage des valeurs à virgule flottante suivantes à l'aide .9g :

  • 0,0606060606060606
  • 0,3333333333333333
  • 0,05
  • 0,4
  • 0,1818181818181818
  • 0,0606060606060606 : La précision de 9 tronque les zéros non significatifs, ce qui donne 0,0606060606, qui s'inscrit dans la largeur de 10.
  • 0.3333333333333333 : Semblable au premier exemple, la chaîne résultante 0,333333333 s'inscrit dans la largeur de 10.
  • 0,05 : Avec seulement 2 significatifs chiffres, 0,05 est complété par des espaces pour respecter la largeur minimale de 10.
  • 0,4 : similaire à 0,05, 0,4 est également complété pour respecter la largeur minimale de 10.
  • 0,1818181818181818 : la précision de 9 donne 0,181818182, le 2 final étant arrondi au chiffre supérieur. Cette chaîne s'inscrit dans une largeur de 10.
Dernier tutoriel Plus>

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