我知道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它可以自动调整它的最小宽度。