2015-03-20 7 views
1

Pour moi, il semble normal d'être 1.234e + 05 en utilisant cette conversion, parce que quand nous l'inversons avec '"% f \ n", 1.235e + 05' nous obtenons 123500.000000 au lieu de souhaité "123400.000000".Pourquoi la notation scientifique pour "(double) 123456" avec "% .4g" conversion est "1.235e + 05" au lieu de 1.234e + 05

En fait, la question est: pourquoi le chiffre "4" est-il omis?!

L'exemple suivant va renforcer ce que je voulais dire:

#include <stdio.h> 

int main(int argc, char **argv) 
{ 
    char x[100]; 
    sprintf(x, "%.4g", (double)123456); 
    printf(">%s<\n", x); 
    printf("%f\n", 1.235e+05); 
    return 0; 
} 

Merci, Valentin

+4

On dirait que c'est juste arrondi vers le haut pour moi, plutôt que de "sauter un chiffre". – JS1

+1

Oui, il arrondit normalement car 123456 est plus proche de 123500 que de 123400. – jschultz410

Répondre

3

printf avec une précision limitée ne tronque pas; il arrondit par le mode d'arrondi actuel. Le mode par défaut est arrondi au plus proche. Comme le 123456 est plus proche de 123500 que de 123400, l'ancienne valeur est imprimée.