2013-12-18 6 views

Antwort

5

Von Ihrer Referenz:

Breite:

Mindestanzahl von Zeichen gedruckt werden. Wenn der zu druckende Wert kürzer ist als diese Zahl, wird das Ergebnis mit Leerzeichen aufgefüllt. Der Wert wird nicht abgeschnitten, auch wenn das Ergebnis größer ist.

Beachten Sie, dass dies alle Zeichen einschließlich der zählt. und die vier Dezimalstellen

6 nach links + 4 nach rechts + 1 für dezimal = (nicht 10)

Was Sie wollen, ist "% 011.4f"

Getestet dies:

printf("%011.4f\n", 1.4); 

Ergebnis ist:

000001.4000 // note 6 to the left and 4 to the right (plus the .) = 11 
+0

OP denkt, das '' 6'' bezieht sich nur auf das, was links vom '.'' steht. Er will nicht unbedingt, dass es mit zwei "0" gepolstert wird. –

+0

@BitFiddlingCodeMonkey Von seiner Frage will er "003254.3999" ist das nicht mit 00 gepolstert? –

+0

Er gibt nicht an, was er will. Das ist aber nur Semantik. Gut gemacht. –

3

die 6-10 oder mehr ändern und Sie werden die 0 Polsterung sehen. Die 6, die Sie angeben, ist die Mindestanzahl der Zeichen, die gedruckt werden. Ihre Nummer (3254.3999) hat neun.

+0

6 + 4 + 1 = 11 nicht 10 –

+0

ja getestet: 'printf ("% 011.4f \ n ", 1.2344);' Ergebnis ist '000001.2344' <6>. <4> –

1

Versuchen Sie folgendes:

int main() 
{ 
    float Num = 3254.4; 
    printf("%011.4f",Num); 
    return 0; 
} 

dh versuchen, den Spezifikator Wert größer als 6 zu ändern, da Sie die Mindest Zeichen begrenzen angeben.

+0

Benötigen Sie die '0' vor' 10': 'printf ("% 010.4f ", Num);' –

+0

6 + 4 + 1 = 11 nicht 10 - 6 nach links + 4 nach rechts + 1 für dezimal –

1

Dies ist, weil 6 verwendet wird, um die Ausgabe auf 6 Stellen zu rechtfertigen. Da die Ausgabe eine Breite von 9 Stellen hat, ist ihr Effekt nicht sichtbar. Wenn Sie die Breite erhöhen, können Sie den Effekt sehen.

+0

Die Ausgabebreite ist eigentlich 9. –

+1

@BitFiddlingCodeMonkey; Behoben. – haccks