[英]Why does printf() formatting not work for a decimal number all 0's?
我無法想出這個:
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”不是小數點左邊打印的位數,而是要打印的TOTAL位數,包括小數點本身。 如果你想看到小數點左邊的8位數和右邊的3位數(和小數點),你應該使用
printf("Time Stamp = %012.3f\n", stamp); // 8 to the left + 1 for d.p. + 3 to the right = 12
希望有所幫助!
printf
格式說明符遵循以下原型:
%[flags][width][.precision][length]specifier
寬度表示所需的總長度, 精度計為其一部分(如果存在,則包括點)。 要解決您的問題,您應該使用格式%012.3f
。
因為你會混淆精確標記'。' 使用字段寬度說明符。 0000.000包含8個字符。 如果你要求10,你會得到000000.000 ( 10個字符,包括點)。
另請查看以下內容以獲取更多信息
零“0”字符表示應使用零填充而不是空白填充。 如果兩者都使用,則' - '會覆蓋'0' ;
字段寬度:指定字段寬度的可選數字字符串; 如果輸出字符串的字符數少於字段寬度,則在左側(或右側,如果已給出左調整指示符)進行空白填充以構成字段寬度(請注意,前導零是標記,但嵌入的零是字段寬度的一部分);
精度:可選期間'。' ,后跟一個可選的數字字符串,給出一個精度,指定小數點后出現的位數, e和f格式,或者從字符串打印的最大字符數; 如果缺少數字字符串,則精度被視為零;
如果您需要打印8 0,請嘗試:
printf("Time Stamp = %012.3f\n",0.0);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.