2017-06-14 114 views
0

據我所知,在%gprintf的轉換規則是使用%e%E如果指數小於-4或者大於或等於精度;否則使用%f。不打印尾部零和尾部小數點。奇怪輸出

但是,下面的輸出是很奇怪:

printf("%g %G\n", 10.123456789, 10.12345); // output: 10.1235 10.1235 

由於%g精度爲6,我想這將輸出1.e+01,但事實並非如此。誰能幫我理解這一點?

+0

...'printf(「%g%E \ n' ...)... –

+0

閱讀printf的官方文檔 –

+0

@ l'L你是什麼意思? –

回答

3

this printf (and family) reference

令P等於如果沒有指定精度的精度,如果非零,6,或1,如果精度爲0。然後,如果用式E中的轉換將具有X的指數: - 1 - 如果P> X≥-4,轉換是具有式F或F和精度p

  • X.
  • 否則,轉換與風格e或E和精度p - 1

由於您使用默認的精度,然後P等於6。指數X1。這意味着P > X ≥ −4爲真(6 > 1 ≥ −4),輸出結果用f(或F)說明符和精度6 - 1 - 1(相當於4,是您所看到的精度)打印。

總之,輸出實際上應該是什麼。

+1

謝謝,我之前誤解了'%g'。 –