我无法想出这个:
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')。
答案 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);