Maison >développement back-end >Golang >Comment fonctionne la précision avec la largeur dans le spécificateur de format %g de fmt.Printf ?

Comment fonctionne la précision avec la largeur dans le spécificateur de format %g de fmt.Printf ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-10-26 12:23:29325parcourir

How does precision work with width in fmt.Printf's %g format specifier?

Comment fmt.Printf fonctionne-t-il avec les champs de largeur et de précision en %g ?

Comportement de fmt.Printf avec les champs de largeur et de précision en %g g peut prêter à confusion. Pour le comprendre, nous devons clarifier la documentation.

La déclaration suivante dans la documentation est particulièrement importante :

precision sets the number of places after the decimal, if appropriate, except that for %g/%G it sets the total number of digits.

Dans cette déclaration, « cela » fait référence à la précision et non à la largeur. Cela signifie que tandis que la largeur spécifie la largeur minimale du champ, la précision spécifie le nombre total de chiffres affichés, à l'exclusion des zéros non significatifs.

Par exemple, lorsque nous formatons 123,45 en utilisant fmt.Printf("%.4g"), le le résultat est 123,5. En effet, la précision est définie sur 4 et 123,5 comporte 4 chiffres (à l'exclusion du point décimal).

Cependant, lorsqu'il y a des zéros non significatifs, le comportement devient plus complexe. Les zéros non significatifs ne sont pas comptés comme des chiffres et ne sont pas supprimés lorsqu'il y en a moins de 4. Par exemple, lorsque nous formatons 0,00012345 à l'aide de fmt.Printf("%.4g"), le résultat est 0,0001234. En effet, la précision est définie sur 4 et 0,0001234 comporte 4 chiffres (à l'exclusion du point décimal et des zéros non significatifs).

Maintenant que nous comprenons comment se comporte la précision, nous pouvons examiner le champ de largeur. Largeur spécifie la largeur minimale du champ, y compris la décimale et les éventuels exposants. Si la valeur formatée comporte plus de chiffres que la largeur spécifiée, elle s'étendra au-delà de la largeur. Cependant, la précision est prioritaire, la valeur doit donc d'abord satisfaire à l'exigence de précision.

Dans votre exemple, vous spécifiez .9g, ce qui signifie un total de 9 chiffres (hors zéros non significatifs) et une largeur minimale de 10. , y compris le point décimal et les éventuels exposants. Examinons chaque valeur individuellement :

  • 0,0606060606060606 : 9 chiffres sans zéros non significatifs équivaut à 0,0606060606, ce qui fait déjà 12 caractères de large, dépassant la largeur minimale de 10.
  • 0,33333333333333333 : similaire au valeur précédente, 9 chiffres sans zéros non significatifs équivaut à 0,333333333, soit une largeur de 11 caractères, dépassant la largeur minimale de 10.
  • 0,05 : 9 chiffres sans zéros non significatifs équivaut à 0,05, ce qui est inférieur à la largeur minimale de 10. Il sera complété par 6 espaces pour respecter la largeur minimale.
  • 0,4 : semblable à la valeur précédente, 9 chiffres sans zéros non significatifs équivaut à 0,4, ce qui est inférieur à la largeur minimale de 10. Il sera complété par 6 espaces pour respecter la largeur minimale.
  • 0,1818181818181818 : 9 chiffres sans zéros non significatifs correspondent à 0,181818182, ce qui est dû à l'arrondi. Il dépasse la largeur minimale de 10 avec 11 caractères.

Cela explique les largeurs inattendues que vous avez observées.

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!

Déclaration:
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