2017-06-14 3 views
0

ich weiß, die Umwandlungsregeln in %gprintf sind, dass %e%E oder zu verwenden, wenn der Exponent kleiner ist als -4 oder größer oder gleich der Genauigkeit; Ansonsten verwenden Sie %f. Nachgestellte Nullen und ein nachkommender Dezimalpunkt werden nicht gedruckt.merkwürdige Ausgänge% g in printf

ist jedoch die Ausgänge von unten sehr seltsam:

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

Da die Präzision der %g 6 ist, ich denke, es wäre 1.e+01 gibt, aber es funktioniert nicht. Wer kann mir helfen, das zu verstehen?

+0

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

+0

Lesen Sie die offizielle Dokumentation von printf –

+0

@ l'L'Was meinen Sie? –

Antwort

3

Von this printf (and family) reference:

Sei P gleich die Genauigkeit, wenn ungleich Null, 6 wenn die Genauigkeit nicht angegeben ist, oder 1, wenn die Genauigkeit 0 ist. Wenn dann eine Umwandlung mit Stil E würde einen Exponenten von X:

  • wenn P> X ≥ -4, die Umwandlung mit Stil f oder F und Präzision P - 1 - X.
  • sonst, der Umsatz mit Stil e oder E und Präzision P - 1.

Da Sie die Standardgenauigkeit verwenden dann P-6 gleich ist. Der Exponent X ist 1. Das bedeutet, P > X ≥ −4 ist wahr (6 > 1 ≥ −4) und die Ausgabe wird mit dem f (oder F) Spezifizierer und der Genauigkeit 6 - 1 - 1 (die gleich 4 ist und ist die Präzision, die Sie sehen) gedruckt.

Kurz gesagt, die Ausgabe ist eigentlich, was es sein sollte.

+1

Danke, ich habe '% g' vorher missverstanden. –