Comment% g Arrondit nombres à virgule flottante?
-
27-09-2019 - |
Question
Alors que j'utilise %g
comme spécificateur de format dans printf()
, parfois il arrondit jusqu'à 2 places après le point décimal, parfois JUSQU'A 3 places, someimes jusqu'à 4 places ... comment il le fait?
En fait, où nous devrions utiliser %g
au lieu de %f
ou %e
pour les nombres à virgule flottante?
La solution
Le spécificateur de format %g
fait son arrondi comme %f
ferait, mais si %f
entraînerait 4.234000
, alors %g
omettra les zéros et imprimer 4.234
.
%g
doit être utilisé quand il fait le plus de sens dans votre format de sortie que certains numéros sont imprimés en 12345.6
, tandis qu'un nombre légèrement plus grand sera imprimé 1.235e04
.
Autres conseils
%g
automatiquement « flips » entre l'utilisation %e
et %f
en fonction de la valeur, dans une tentative d'affichage d'informations que possible, de la même manière que les calculatrices à main font.
En outre, avec des zéros de fin de %g
et point décimal ne sont pas inclus.
Pour la conversion de %f
, la « précision » est le nombre de chiffres après le point décimal , alors que pour %g
il est le nombre d'importants chiffres.
La précision par défaut est 6 dans les deux cas.
De la printf manuel:
«Le double argument est converti dans un style f ou e (ou F ou E pour conversions G). La précision indique le nombre de chiffres significatifs. Si la précision est manquante, 6 chiffres sont donnés; si la précision est égale à zéro, elle est traitée comme 1. e est utilisée si l'exposant à partir de sa conversion est inférieure à -4 ou plus supérieur ou égal à la précision. zéros sont retirés de la partie décimale du résultat; un point décimal apparaît uniquement si elle est suivie d'au moins un chiffre. "
Je ne veux pas « RTFM », mais vous trouverez probablement ce que vous cherchez dans les sections du manuel sur le contrôle de la précision et la longueur.