據我所知,在%g
printf
的轉換規則是使用%e
或%E
如果指數小於-4
或者大於或等於精度;否則使用%f
。不打印尾部零和尾部小數點。奇怪輸出
但是,下面的輸出是很奇怪:
printf("%g %G\n", 10.123456789, 10.12345); // output: 10.1235 10.1235
由於%g
精度爲6,我想這將輸出1.e+01
,但事實並非如此。誰能幫我理解這一點?
據我所知,在%g
printf
的轉換規則是使用%e
或%E
如果指數小於-4
或者大於或等於精度;否則使用%f
。不打印尾部零和尾部小數點。奇怪輸出
但是,下面的輸出是很奇怪:
printf("%g %G\n", 10.123456789, 10.12345); // output: 10.1235 10.1235
由於%g
精度爲6,我想這將輸出1.e+01
,但事實並非如此。誰能幫我理解這一點?
從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
。指數X
是1
。這意味着P > X ≥ −4
爲真(6 > 1 ≥ −4
),輸出結果用f
(或F
)說明符和精度6 - 1 - 1
(相當於4
,是您所看到的精度)打印。
總之,輸出實際上應該是什麼。
謝謝,我之前誤解了'%g'。 –
...'printf(「%g%E \ n' ...)... –
閱讀printf的官方文檔 –
@ l'L你是什麼意思? –