c - 为什么 printf() 格式不适用于全 0 的十进制数?

标签 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)。

最佳答案

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

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

希望对您有所帮助!

关于c - 为什么 printf() 格式不适用于全 0 的十进制数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24216580/

相关文章:

c - C 编译器的行为差异示例

c - Perl:阻塞信号没有延迟 -> 提供了测试代码

c# - 如何使用 GTKSharp 打印图像

swift - 为什么 Float 到 Double 的转换在运行时失败?

c - 我可以使用什么更准确的算法来计算数字的正弦?

java - 在 Java 和 C 中使用 Eclipse

python - PyArg_ParseTuple 和回调函数指针

wpf - 如何在一个文档中打印多个 WPF 页面

android - Android 中的打印 API

c - 使用 float 而不是 double 时出现奇怪的输出