'sprintf':C中的双精度

use*_*054 14 c

考虑:

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

Output: s0.000000
Run Code Online (Sandbox Code Playgroud)

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

wha*_*cko 30

从您的问题看来,您似乎正在使用C99,因为您已经使用%lf了双倍.

要实现所需的输出替换:

sprintf(aa, "%lf", a);
Run Code Online (Sandbox Code Playgroud)

sprintf(aa, "%0.7f", a);
Run Code Online (Sandbox Code Playgroud)

一般语法"%A.B"意味着在小数点后使用B位.这个意思A更复杂,但可以在这里阅读.

  • ``%AB"`_ notes not_表示小数点前的'A`数字.`A`是_"字段宽度"_.它是整个打印数字的最小字符宽度.根据需要,输出用空格填充(默认情况下). (10认同)
  • 我不确定为什么这个答案建议从`lf`切换到`f`.`lf`是`double`的完全合适的格式说明符.此外,它在C99中被合法化以修复`fscanf`和`fprintf`中格式说明符之间令人讨厌的不一致.这意味着对于`double`值,`lf`应优先于'f`.`f`代表`float`. (2认同)

Mar*_*iot 7

你需要写它 sprintf(aa, "%9.7lf", a)

有关格式代码的更多详细信息,请访问http://en.wikipedia.org/wiki/Printf.

  • %lf是长双.%9.7f应该用于双倍. (2认同)
  • @kk6yb:`%lf`对于C89是未定义的,与C99的`%f`相同(两者都可以打印'double`值).对于long double,正确的转换说明符是`%Lf`. (2认同)
  • 更准确地说,在''%X.Yf'中,`Y`表示小数点后显示的位数(默认值为6),"X"表示要显示的最小字符数.在你的情况下,`X`不是必需的,但你需要添加`.Y`,其中`Y`是要打印的小数位数. (2认同)