簡體   English   中英

為什么printf(“%。6g,<value>)在小數點后忽略零?

[英]Why does printf("%.6g, <value>) ignore zeroes after decimal point?

我想在小數點后打印最多6位數,所以我使用了以下內容:

printf("%.6g",0.127943989);

printf的輸出是0.127944這是正確的,但當我嘗試這個:

printf("%.6g",0.007943989);

輸出變為0.00794399,這不是我期望看到的!

似乎printf在小數點后忽略零。 那么如何強制它輸出最大6位精度?

"%f"格式說明符:

printf("%.6f\n",0.007943989)  // prints 0.007944

你在找什么? 請記住,如果數字保證,它不會自動切換到%e格式樣式,因此這可能不是您正在尋找的。

例如,以下內容:

printf("%.6g\n",0.00007943989);
printf("%.6f\n",0.00007943989);

打印:

7.94399e-005
0.000079

並且不清楚你是否想要"%g"提供的較小數字的指數形式。

請注意, %f%g的規范對於如何處理精度規范的行為略有不同。

  • for %f :“小數點字符后的位數等於精度規格”
  • for %g :“精度指定有效位數”

並且小數點后的零運行不計入有效數字(這表示你看到%g的行為)。

ISO C標准要求

一個可選的精度,以句點('。')的形式,后跟一個可選的十進制數字字符串......這給出了... gG轉換的最大有效位數

以下是使用GNU libc獲得的輸出(GCC 4.5.1,libc 2.11; GCC 4.6.3,libc 2.15)

printf("%.6g\n", 0.12);
0.12
printf("%.6g\n", 0.1234567890);
0.123457
printf("%.6g\n", 0.001234567890);
0.00123457
printf("%#.6g\n", 0.001234567890);
0.00123457
printf("%.6g\n", 0.00001234567890);
1.23457e-05
printf("%#.6g\n", 0.00001234567890);
1.23457e-05

printf("%.6f\n", 0.12);
0.120000
printf("%.6f\n", 0.1234567890);
0.123457
printf("%.6f\n", 0.001234567890);
0.001235
printf("%#.6f\n", 0.001234567890);
0.001235
printf("%.6f\n", 0.001234567890);
0.000012
printf("%#.6f\n", 0.001234567890);
0.000012

暫無
暫無

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

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