簡體   English   中英

為什么printf()格式不能用於十進制數全0?

[英]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.00010個字符,包括點)。

另請查看以下內容以獲取更多信息

“0”字符表示應使用零填充而不是空白填充。 如果兩者都使用,則' - '會覆蓋'0' ;

字段寬度:指定字段寬度的可選數字字符串; 如果輸出字符串的字符數少於字段寬度,則在左側(或右側,如果已給出左調整指示符)進行空白填充以構成字段寬度(請注意,前導零是標記,但嵌入的零是字段寬度的一部分);

精度:可選期間'。' ,后跟一個可選的數字字符串,給出一個精度,指定小數點后出現的位數, ef格式,或者從字符串打印的最大字符數; 如果缺少數字字符串,則精度被視為零;

如果您需要打印8 0,請嘗試:

printf("Time Stamp = %012.3f\n",0.0);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM