2016-06-28 9 views
4

Ich möchte verstehen, wenn Format-Spezifizierer %g für Doppel startet Werte im exponentiellen Format zu drucken.Von, wenn Formatbezeichner '% g' für Doppel beginnt im Exponentialformat zu drucken

myTest.c

#include <stdio.h> 

int main() { 

    double val = 384615.38462; 
    double val2 = 9999999; 
    printf ("val = %g\n",val); 
    printf ("val2 = %g\n",val2); 
    return 0; 
} 

Zusammengestellt mit gcc:

gcc version 4.5.2 (GCC) 
Target: i386-pc-solaris2.11 

Ausgang:

val = 384615 
val2 = 1e+07 

Frage: Warum val als ganze Zahl gedruckt und warum val2 umgewandelt wurde exponentielles Format, auch wenn ich nicht verwendet habe %lf in printf.

Gibt es einen Bereich ab, wenn Druckwerte im Exponentialformat gestartet werden? Wenn ja, können wir auf irgendeine Weise erraten, was der Wertebereich sein könnte?

Vielen Dank im Voraus.

+0

[Nicht ein Betrüger, aber beantwortet die Frage.] (Http://Stackoverflow.com/a/35476709/694733) – user694733

Antwort

6

Nach den man 3 printf:

g, G

Das Doppel Argument wird in der Art F oder E (oder F oder G E für Umrüstungen) umgewandelt. Die Genauigkeit gibt die Anzahl der signifikanten Ziffern an. Wenn die Genauigkeit fehlt, werden 6 Ziffern angegeben; Wenn die Genauigkeit Null ist, wird sie wie 1 behandelt. Der Stil e wird verwendet, wenn der Exponent aus seiner Umwandlung kleiner als -4 oder größer oder gleich der Genauigkeit ist. Nachgestellte Nullen werden aus dem Bruchteil des Ergebnisses entfernt; Ein Dezimalpunkt erscheint nur, wenn ihm mindestens eine Ziffer folgt.

Und der C11 - ISO/IEC 9899: 2011 Standardentwurf N1570 (http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf):

g, G

Ein Doppel Argument eine Gleitkommazahl darstellt, die in Stil umgewandelt f oder e (oder in Stil F oder E im Falle eines G-Konvertierungsspezifizierers), , abhängig von dem konvertierten Wert und der Genauigkeit. Sei P gleich der Genauigkeit wenn ungleich Null, 6 wenn die Genauigkeit weggelassen wird, oder 1 wenn die Genauigkeit Null ist. Dann , wenn eine Umwandlung mit Stil E würde einen Exponenten von X hat:

- wenn P> X ≥ -4, die Umwandlung ist mit Stil f (oder F) und Präzision P - (X + 1) .

- ansonsten wird die Umwandlung mit Stil E (oder E) ist und Präzision P - 1.

Schließlich sei denn, das Flag # verwendet wird, werden alle nachgestellten Nullen aus dem Bruchteil des Ergebnisses entfernt und das Dezimalzeichen wird entfernt, wenn kein Bruchteil übrig bleibt. Ein Doppelargument, das eine Unendlichkeit oder NaN darstellt, wird im Format eines f- oder F-Konvertierungsspezifizierers konvertiert.

+0

Vielen Dank für die Hilfe. –

2

Die man sagt

g, G

Das Doppel Argument wird in der Art F oder E (oder F oder G E für Umrüstungen) umgewandelt. Die Genauigkeit gibt die Anzahl der signifikanten Ziffern an. Wenn die Genauigkeit fehlt, werden 6 Ziffern angegeben; Wenn die Genauigkeit Null ist, wird sie wie 1 behandelt. Der Stil e wird verwendet, wenn der Exponent von seiner Umwandlung weniger als -4 oder größer oder gleich der Genauigkeit ist. Nachgestellte Nullen werden aus dem Bruchteil des Ergebnisses entfernt; Ein Dezimalpunkt erscheint nur, wenn ihm mindestens eine Ziffer folgt.

+1

Also, DV: konntest du mir Hits geben ...? – LPs

+0

Danke für die Hilfe. –