使用printf打印浮点数时出现额外的前导零?

56
我希望能够使用printf编写类似于这样的时间字符串:1:04:02.1 hours
但是当我尝试编写类似代码时:

printf("%d:%02d:%02.1f hours\n", 1, 4, 2.123456);

我得到:

1:04:2.1 hours

如何在浮点数格式化中添加前导零?

2个回答

88

使用%f格式说明符时,“2”被视为总共的最小字符数,而不是小数点前的数字个数。因此,您需要将其替换为4,以获取两个前导数字+小数点+一个小数位。

printf("%d:%02d:%04.1f hours\n", 1, 4, 2.123456);

对于非浮点数也有这个功能是很好的! - wuppi

23

尝试使用%04.1f代替%02.1f。这里的“4”表示至少会打印出4个字符,而“2.1”有3个(> 2)字符,所以为了启用填充零,你需要4个。


负数怎么样?我想要像这样的东西:-00.1 - Mohammad Kholghi
首先,将其转换为正数 f = fabsf(f),然后 -0%.1f。这对于 f<10 的情况很有效。对于 f>10 的情况,它类似于 -010.3。我不想要前导的 0-10.3。有更好的想法吗? - Mohammad Kholghi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接