C printf中的子说明符
为什么它不像我期望的那样打印C printf中的子说明符,c,printf,mingw32,C,Printf,Mingw32,为什么它不像我期望的那样打印003254.3999,而是打印3254.3999 发布前。将6更改为10或更大,您将看到0填充。您指定的6是它将打印的最小字符数。您的号码(3254.3999)有九个。试试这个: int main () { float Num = 3254.4; printf("%06.4f",Num); return 0; } 即,尝试将说明符值更改为大于6,因为您正在指定最小字符限制。参考: 宽度: 要打印的最小字符数。如果要打印的值小于此数字,则结果
003254.3999
,而是打印3254.3999
发布前。将
6
更改为10
或更大,您将看到0
填充。您指定的6
是它将打印的最小字符数。您的号码(3254.3999)有九个。试试这个:
int main ()
{
float Num = 3254.4;
printf("%06.4f",Num);
return 0;
}
即,尝试将说明符值更改为大于6,因为您正在指定最小字符限制。参考:
宽度:
要打印的最小字符数。如果要打印的值小于此数字,则结果将用空格填充。即使结果更大,该值也不会被截断
请注意,这将统计所有字符,包括。小数点后四位
左6+右4+1表示十进制=11(不是10)
您需要的是“%011.4f”
对此进行了测试:
int main ()
{
float Num = 3254.4;
printf("%011.4f",Num);
return 0;
}
结果是:
printf("%011.4f\n", 1.4);
这是因为
6
用于将输出右对齐到6个位置。由于输出宽度为9个位置,其效果不可见。如果增加宽度,则可以看到效果。需要0
在10
前面:printf(“%010.4f”,Num)代码>6+4+1=11而不是10--6向左+4向右+1表示小数点是测试此:printf(“%011.4f\n”,1.2344)代码>结果是000001.2344
。OP认为'6'
仅适用于'左侧的内容。
。他不一定要用两个'0'
s来填充它。@bitfidlingcodemonkey从他的问题中,他想要的是“003254.3999”,不是用00填充的吗?他没有指定这是他想要的。不过这只是语义学。干得好。输出宽度实际上是9。@BitFiddlingCodeMonkey;修好了。
000001.4000 // note 6 to the left and 4 to the right (plus the .) = 11