开发者

'sprintf': double precision in C

开发者 https://www.devze.com 2022-12-12 02:25 出处:网络
Consider: double a = 0.0000005l; char aa[50]; sprintf(aa, \"%lf\", a); printf(\"%s\", aa); Output: s0.000000

Consider:

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

Output: s0.000000

In the above code snippet, the variable aa can contain only six decimal precis开发者_如何学编程ion. I would like to get an output like "s0.0000005". How do I achieve this?


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.


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.


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

精彩评论

暂无评论...
验证码 换一张
取 消