‘sprintf’: double précision en C

Considérer:

double a = 0.0000005l; char aa[50]; sprintf(aa, "%lf", a); printf("%s", aa); Output: s0.000000 

Dans l’extrait de code ci-dessus, la variable aa ne peut contenir qu’une précision de six décimales. Je voudrais obtenir une sortie comme “s0.0000005”. Comment est-ce que je réalise ceci?

D’après votre question, il semble que vous utilisiez C99, comme vous avez utilisé %lf pour double.

Pour obtenir le résultat souhaité, remplacez:

 sprintf(aa, "%lf", a); 

avec

 sprintf(aa, "%0.7f", a); 

La syntaxe générale "%AB" signifie d’utiliser les chiffres B après le point décimal. La signification du A est plus compliquée, mais peut être lue ici .

Vous devez l’écrire comme sprintf(aa, "%9.7lf", a)

Consultez http://en.wikipedia.org/wiki/Printf pour plus de détails sur les codes de format.

Le problème est avec sprintf

 sprintf(aa,"%lf",a); 

% lf dit d’interpeller “a” en tant que “long double” (16 octets) mais c’est en fait un “double” (8 octets). Utilisez ceci à la place:

 sprintf(aa, "%f", a); 

Plus de détails ici sur cplusplus.com