‘sprintf’: doble precisión en C

Considerar:

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

En el fragmento de código anterior, la variable aa puede contener solo seis decimales de precisión. Me gustaría obtener una salida como “s0.0000005”. ¿Cómo logro esto?

De su pregunta parece que está usando C99, ya que ha usado %lf para el doble.

Para lograr la salida deseada reemplazar:

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

con

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

La syntax general "%AB" significa usar dígitos B después del punto decimal. El significado de la A es más complicado, pero se puede leer aquí .

sprintf(aa, "%9.7lf", a) escribirlo como sprintf(aa, "%9.7lf", a)

Echa un vistazo a http://en.wikipedia.org/wiki/Printf para obtener más detalles sobre los códigos de formato.

El problema es con sprintf.

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

% lf dice interpetar “a” como un “doble largo” (16 bytes) pero en realidad es un “doble” (8 bytes). Use esto en su lugar:

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

Más detalles aquí en cplusplus.com