![](/img/trans.png)
[英]Why does printf() with %f lose a digit after decimal point sometimes?
[英]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
的規范對於如何處理精度規范的行為略有不同。
%f
:“小數點字符后的位數等於精度規格” %g
:“精度指定有效位數” 並且小數點后的零運行不計入有效數字(這表示你看到%g
的行為)。
ISO C標准要求
一個可選的精度,以句點('。')的形式,后跟一個可選的十進制數字字符串......這給出了... g和G轉換的最大有效位數
以下是使用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.