为什么printf()格式不能用于十进制数全0?

时间:2014-06-14 04:30:17

标签: c printing floating-point formatting integer

我无法想出这个:

gettimeofday(&time,NULL);
float stamp = ( (time.tv_sec*1000000)+(time.tv_usec) );

printf("Time Stamp = %08.3f\n",12345678.123);
printf("Time Stamp = %08.3f\n",stamp);
printf("Time Stamp = %08.3f\n",00000000.000);

输出:

Time Stamp = 12345678.123    
Time Stamp = 637973952.000    
Time Stamp = 0000.000  //?

最后一个printf如何在小数点前打印8 0(仅打印4)?

我的目标是在小数点左边打印8位数字,在右边打印3位数字。 (所有时间,如果数字较小,插入填充0')。

4 个答案:

答案 0 :(得分:4)

小数点左边的“8”不是小数点左边打印的位数,而是要打印的TOTAL位数,包括小数点本身。如果你想看到小数点左边8位数和右边3位数(和小数点),你应该使用

printf("Time Stamp = %012.3f\n", stamp);  // 8 to the left + 1 for d.p. + 3 to the right = 12

希望有所帮助!

答案 1 :(得分:1)

printf格式说明符遵循以下原型:

%[flags][width][.precision][length]specifier

宽度表示所需的总长度,精度计为其一部分(包括点(如果存在))。 要解决您的问题,您应该使用格式%012.3f

答案 2 :(得分:0)

因为您将精确标记'。'与字段宽度说明符混淆。 0000.000 包含 8 个字符。如果您要求 10 ,您将获得 000000.000 10 字符,包括点)。

另请查看以下内容以获取更多信息

  

'0'字符,表示应使用零填充   而不是空白填充。 ' - 会覆盖'0'(如果两者都使用);

     

字段宽度:指定字段宽度的可选数字字符串;如果   输出字符串的字符数少于字段宽度   左侧空白填充(如果是左侧调整指示,则为右侧)   已经给出了弥补场宽(注意前导零)   是一个标志,但嵌入的零是字段宽度的一部分);

     

精确度:可选时段'。',后跟可选数字   给出精度的字符串,指定要的位数   小数点后面, e f 格式,或最大值   从字符串打印的字符数;如果是数字字符串   缺少,精度被视为零;

答案 3 :(得分:0)

如果您需要打印8 0,请尝试:

printf("Time Stamp = %012.3f\n",0.0);