Maison  >  Article  >  développement back-end  >  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 » ?

Barbara Streisand
Barbara Streisandoriginal
2024-10-26 01:27:02301parcourir

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!

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