Maison > développement back-end > Golang > le corps du texte

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

Barbara Streisand
Libérer: 2024-10-26 01:27:02
original
309 Les gens l'ont consulté

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 champ
et la précision définit le nombre de places 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 l'utilisation de "it" 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,2345. e-06 car %.9g prend en compte tous les chiffres significatifs après la virgule décimale.

L'impact de la largeur et de la précision

Le champ width spécifie la largeur minimale de toute la chaîne formatée, y compris la décimale point 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 la virgule décimale.

Pour %g, le champ de précision remplace le champ de largeur . 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 que l'exemple implique le formatage des valeurs à virgule flottante suivantes en utilisant .9g :

  • 0,0606060606060606
  • 0,3333333333333333
  • 0,05
  • 0,4
  • 0,181818181818 1818
  • 0.0606060606060606 : Le une 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 chiffres significatifs, 0,05 est complété par des espaces pour respecter la largeur minimale de 10.
  • 0,4 : Semblable à 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 supérieur. Cette chaîne s'adapte à une largeur de 10.

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
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!