2015-06-23 10 views
6

Usando sprintf e la sintassi generale "%A.B" posso fare questo:Set precisione dinamicamente utilizzando sprintf

double a = 0.0000005l; 
char myNumber[50]; 
sprintf(myNumber,"%.2lf",a); 

Posso impostare A e B in modo dinamico nella stringa di formato?

+1

Sì, è possibile, si veda per es [questo riferimento a 'printf' (e famiglia)] (http://en.cppreference.com/w/c/io/fprintf). –

+1

In alternativa, la stringa di formato stessa potrebbe anche essere creata con un'altra chiamata a sprintf. – Lundin

risposta

9

Sì, puoi farlo. È necessario utilizzare un asterisco * come larghezza del campo e .* come precisione. Quindi, è necessario fornire gli argomenti che contengono i valori. Qualcosa di simile

sprintf(myNumber,"%*.*lf",A,B,a); 

Nota: A e B devono essere di tipo int. Dallo standard C11, capitolo §7.21.6.1, fprintf() funzione

... una larghezza di campo, o la precisione, o entrambi, possono essere contrassegnati da un asterisco. Nel caso , un argomento int fornisce larghezza o precisione del campo. Gli argomenti che specificano la larghezza del campo, o la precisione, o entrambi, devono apparire (in quest'ordine) prima che l'argomento (se presente) sia convertito. Un argomento di larghezza campo negativo viene considerato come un flag - seguito da una larghezza di campo positiva. Un argomento di precisione negativo viene preso come se la precisione fosse omessa.