Maison  >  Article  >  développement back-end  >  Comment fmt.Printf gère-t-il les zéros non significatifs lors de l'utilisation de la largeur et de la précision pour les valeurs à virgule flottante ?

Comment fmt.Printf gère-t-il les zéros non significatifs lors de l'utilisation de la largeur et de la précision pour les valeurs à virgule flottante ?

Linda Hamilton
Linda Hamiltonoriginal
2024-10-26 02:05:28644parcourir

  How Does fmt.Printf Handle Leading Zeros When Using Width and Precision for Floating-Point Values?

fmt.Printf Différence de syntaxe de largeur et de précision

L'utilisation de fmt.Printf avec des champs de largeur et de précision pour les valeurs à virgule flottante peut être déroutant en raison d’une divergence dans la documentation. L'instruction :

"Pour les valeurs à virgule flottante, width définit la largeur minimale du champ et la précision définit le nombre de places après la virgule, le cas échéant, sauf que pour %g/%G, elle définit le total nombre de chiffres."

Bien que grammaticalement correct, cela conduit à une ambiguïté car "cela" fait référence à la précision plutôt qu'à la largeur. Cela peut entraîner un comportement de formatage inattendu.

Précision des notations à virgule flottante

Considérez les valeurs à virgule flottante suivantes :

123.45
12312.2
1.6069
0.6069
0.0006069

Quand en utilisant fmt.Printf("%.4g"), le résultat est :

123.5
1.231e+04
1.607
0.6069
0.0006069

Observez que le champ de précision (.4) spécifie le nombre total de chiffres, à l'exclusion des points décimaux et des exposants. Par conséquent, même si les deux dernières valeurs comportent des zéros non significatifs, elles comptent toujours comme des chiffres et ne sont pas tronquées.

Spécifications de largeur

D'un autre côté, le champ de largeur (par exemple, g) spécifie la largeur minimale du champ, y compris les points décimaux et les exposants. Si la valeur formatée dépasse cette largeur, elle ne sera pas tronquée. Cependant, les zéros non significatifs ne sont pas comptés dans la largeur tant qu'il n'y a pas quatre zéros non significatifs ou plus.

Exemple

Dans votre cas, la chaîne de format .9g spécifie une largeur minimale de 10 et un nombre total de chiffres de 9, à l'exclusion des zéros non significatifs. Le formatage résultant est :

0.0606060606060606: 9 digits, 12 width
0.3333333333333333: 9 digits, 11 width
0.05: 3 digits, 10 width (padded with spaces)
0.4: 2 digits, 10 width (padded with spaces)
0.1818181818181818: 9 digits (rounded), 11 width

Cela démontre l'interaction entre les champs de précision et de largeur et comment les zéros non significatifs peuvent affecter le formatage final.

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