'sprintf':C中的双精度

时间:2009-11-23 22:27:53

标签: c

考虑:

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

Output: s0.000000

在上面的代码片段中,变量aa只能包含六位小数。我想获得像“s0.0000005”这样的输出。我如何实现这一目标?

3 个答案:

答案 0 :(得分:27)

从您的问题看来,您似乎在使用C99,因为您已将%lf用于双倍。

要实现所需的输出替换:

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

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

一般语法"%A.B"表示在小数点后使用B位。 A的含义更复杂,但可以阅读here

答案 1 :(得分:7)

您需要像sprintf(aa, "%9.7lf", a)

一样编写它

查看http://en.wikipedia.org/wiki/Printf以获取有关格式代码的更多详细信息。

答案 2 :(得分:-1)

问题在于sprintf

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

%lf表示将“a”解释为“long double”(16字节),但它实际上是“double”(8字节)。请改用:

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

更多详情here on cplusplus.com