2013-05-07 14 views
15

ich interessant Format gefunden nonterminated feste Länge Zeichenfolge wie diese für den Druck:Printf variable Anzahl von Dezimalstellen in float

char newstr[40] = {0}; 
sprintf(newstr,"%.*s", sizeof(mystr), mystr); 

So denke ich, vielleicht ist es eine Möglichkeit, unter printf Befehl eine Float-Zahl für das Drucken ...

"% 8.2f"

haben Fähigkeit, die Anzahl der Dezimalstellen mit integer-Zahl zu wählen.

Etwas wie folgt:

sprintf(mystr, "%d %f", numberofdecimals, floatnumbervalue) 

EDIT - Lösung:
(zum Abrunden und eine Fließkommazahl, um die gewünschte Präzision clearing).

int precision = 2; 
char kolf[16] = {0}; 
sprintf(kolf, "%8.*f", precision, mystruct.myfloat); 
float kol = atof(kolf); 

Antwort

29

Sie auch ".*" mit floating Punkte verwenden können, finden auch http://www.cplusplus.com/reference/cstdio/printf/ (bezieht sich auf C++, aber die Formatbezeich sind ähnlich)

.Anzahl: Für a, A, E, E, F und F Spezifizierer: Dies ist die Anzahl der Ziffern, die nach dem Dezimalzeichen gedruckt werden (standardmäßig ist dies 6).

...

*. Die Genauigkeit wird in dem Format-String nicht spezifiziert, sondern als zusätzliches Argument ganzzahligen Wert vor dem Argument, das zu formatiert werden muß.

Zum Beispiel:

float floatnumbervalue = 42.3456; 
int numberofdecimals = 2; 
printf("%.*f", numberofdecimals, floatnumbervalue); 

Ausgang:

42.35 
+0

Danke, das löst mein Problem. –

15

können Sie den Stern auch dafür verwenden, sowohl für die Feldbreite und die Präzision:

printf("%*.*f\n", myFieldWidth, myPrecision, myFloatValue); 

Siehe z this reference.

+0

Dank Joach, das ist, was ich suche. –

+1

+1 für den Link zum "C" -Teil von 'en.cppreference.com' - bookmarked :) –

Verwandte Themen