2013-12-18 14 views

risposta

5

Dal tuo Riferimento:

larghezza:

Numero minimo di caratteri da stampare. Se il valore da stampare è più corto di questo numero, il risultato viene riempito con spazi vuoti. Il valore non viene troncato anche se il risultato è più grande.

Si noti che questo conta tutti i caratteri incluso il. e le quattro cifre decimali

6 a sinistra + 4 a destra + 1 per decimali = (non 10)

quello che vuoi è "% 011.4f"

Testato questo:

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

risultato è:

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

OP pensa che il ''6'' si applica solo a ciò che si trova a sinistra del'' .''. Non lo vuole necessariamente riempito con due "0". –

+0

@BitFiddlingCodeMonkey Dalla sua domanda vuole che "003254.3999" non sia riempito con 00? –

+0

Non specifica che è ciò che vuole. Questa è solo semantica. Molto bene. –

3

Modificare il 6-10 o superiore e si vedrà il 0 imbottitura. Lo 6 che stai specificando è il numero minimo di caratteri che stamperà. Il tuo numero (3254.3999) ha nove.

+0

6 + 4 + 1 = 11 non 10 –

+0

sì testato: 'printf ("% 011.4f \ n ", 1.2344);' il risultato è '000001.2344' <6>. <4> –

1

Prova questo:

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

cioè, provare a cambiare il valore identificatore maggiore di 6 da quando si specifica limitano i caratteri minimi.

+0

È necessario il '0' davanti a' 10': 'printf ("% 010.4f ", Num);' –

+0

6 + 4 + 1 = 11 non 10 - 6 a sinistra + 4 a destra + 1 per il decimale –

1

Questo perché 6 viene utilizzato per giustificare a destra l'output su 6 posizioni. Dato che l'output diventa larghezza di 9 punti, il suo effetto non è visibile. Se aumenti la larghezza, puoi vedere l'effetto.

+0

La larghezza di output è in realtà 9. –

+1

@BitFiddlingCodeMonkey; Aggiustato. – haccks