Comment% g arrondit les nombres en virgule flottante?

Bien que j’utilise %g comme spécificateur de format dans printf() , il arrondit parfois jusqu’à 2 positions après la virgule, parfois jusqu’à 3, parfois jusqu’à 4 … comment cela se passe-t-il?

En fait, où devrions-nous utiliser %g au lieu de %f ou %e pour les nombres en virgule flottante?

Le spécificateur de format %g effectue son arrondi exactement comme le ferait %f , mais si %f donne 4.234000 , alors %g omettra les zéros de fin et 4.234 .

%g doit être utilisé lorsqu’il est plus logique dans votre format de sortie que certains numéros soient imprimés au 12345.6 , tandis qu’un nombre légèrement supérieur serait au 1.235e04 .

%g bascule automatiquement entre %e et %f fonction de la valeur, dans le but d’afficher autant d’informations que possible, de la même manière que les calculasortingces portatives. De plus, avec %g les zéros et le point décimal ne sont pas inclus.

Pour la conversion %f , la «précision» correspond au nombre de chiffres après le point décimal , tandis que pour %g il s’agit du nombre de chiffres significatifs .
La précision par défaut est 6 dans les deux cas.

Du manuel de printf :

“Le double argument est converti dans le style f ou e (ou F ou E pour les conversions G). La précision spécifie le nombre de chiffres significatifs. Si la précision est manquante, 6 chiffres sont donnés; si la précision est nulle, elle est traitée 1. Le style e est utilisé si l’exposant de sa conversion est inférieur à -4 ou supérieur ou égal à la précision. moins un chiffre. ”

Je ne parle pas de «RTFM», mais vous trouverez probablement ce que vous recherchez dans les sections du manuel sur le contrôle de la précision et de la longueur.