我知道0
在占位符的宽度之前放置任意数量的 's 会实现零填充。例如,printf("%02d", 6);
打印06
.
但是0
在占位符的精度之前放置一个单曲有什么作用呢?例如,对于printf("%0.2lf", 0.123);
和printf("%.2lf", 0.123);
,输出都是0.12
。
如果它什么都不做,是否有首选格式?
它们是“等价的”。如果您要使用“%07.2”,那么它会有所不同,方法是在前面添加额外的零。
编辑:最初有“%04.2”,这当然没有任何区别,因为带有两位小数的浮点数总是4宽。
%3.2f //(print as a floating point at least 3 wide and a precision of 2)
%0.2lf //(print as a floating point at least 0 wide and a precision of 2)
%.2lf //(print as a floating point at least 0(default) wide and a precision of 2)
这些示例应显示差异:
"%0.2lf", 0.123
-> 0.12
(零填充最小宽度为 0,小数点后 2 位)。
"%6.2lf", 0.123
-> __0.12
(空格填充最小宽度为 6,小数点后 2 位)。
"%06.2lf", 0.123
-> 000.12
(零填充最小宽度为 6,小数点后 2 位)。
"%0.6lf", 0.123
-> 0.123000
(最小宽度为 0,小数点后 6 位)。
第一个零指定零填充,然后是最小宽度,默认值为 0。因此它本身实际上被忽略(因为您不能填充 0 宽度)。
%f
不是%lf
。printf
块引用
基本上,当我们% w.p f
用于输出时,w
指的是用于显示值的最小位置数,p
指的是小数点后的位数。
%3.2f
小数点后有 3 个宽和 2 个数字的浮点数
%0.2f
浮点至少 0 宽和小数点后 2 个数字
%.2f
浮点至少 0(默认)宽和 2 精度)
但是不要误解 0 宽度,如果你使用%0.2f
它可以自动调整它的最小宽度。