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 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 :
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!