'sprintf': double precision in C

后端 未结 3 884
南笙
南笙 2021-01-04 01:22

Consider:

double a = 0.0000005l;
char aa[50];
sprintf(aa, \"%lf\", a);
printf(\"%s\", aa);

Output: s0.000000

In the above code snippet, th

相关标签:
3条回答
  • 2021-01-04 01:57

    From your question it seems like you are using C99, as you have used %lf for double.

    To achieve the desired output replace:

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

    with

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

    The general syntax "%A.B" means to use B digits after decimal point. The meaning of the A is more complicated, but can be read about here.

    0 讨论(0)
  • 2021-01-04 02:13

    The problem is with sprintf

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

    %lf says to interpet "a" as a "long double" (16 bytes) but it is actually a "double" (8 bytes). Use this instead:

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

    More details here on cplusplus.com

    0 讨论(0)
  • 2021-01-04 02:15

    You need to write it like sprintf(aa, "%9.7lf", a)

    Check out http://en.wikipedia.org/wiki/Printf for some more details on format codes.

    0 讨论(0)
提交回复
热议问题