printf在C中带有前导零

fre*_*set 43 c formatting printf

我有一个浮点数,如4917.24.我想将它打印到小数点前总共有五个字符,前导零,小数点后三位数.

我尝试printf("%05.3f", n)使用我正在使用的嵌入式系统,但它会打印出来*****.我的格式说明符是否正确?

Car*_*rum 59

您的格式说明符不正确.从printf()我机器上的手册页:

0一个零' 0'字符,表示应该使用零填充而不是空白填充.如果两者都使用,则' -'覆盖' 0';

字段宽度:指定字段宽度的可选数字字符串; 如果输出字符串的字符数少于字段宽度,则在左侧(或右侧,如果已给出左调整指示符)进行空白填充以构成字段宽度(请注意,前导零是标记,但嵌入的零是字段宽度的一部分);

精度:一个可选的句点' .',后跟一个可选的数字字符串,给出一个精度,指定小数点后出现的位数,ef格式,或者从字符串打印的最大字符数; 如果缺少数字字符串,则精度被视为零;

对于您的情况,您的格式为%09.3f:

#include <stdio.h>

int main(int argc, char **argv)
{
  printf("%09.3f\n", 4917.24);
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

输出:

$ make testapp
cc     testapp.c   -o testapp
$ ./testapp 
04917.240
Run Code Online (Sandbox Code Playgroud)

请注意,这个答案取决于您的嵌入式系统是否具有printf()符合这些细节标准的实现 - 许多嵌入式环境没有这样的实现.