2013-05-07 15 views
15

znalazłem ciekawy format drukowania nonterminated stałe ciągi długości tak:printf zmienną liczbę miejsc po przecinku w obrocie

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

Więc myślę, że być może jest jakiś sposób na podstawie polecenia printf do drukowania numeru pływaka ...

"% 8.2f"

mieć możliwość wyboru liczby miejsc po przecinku z liczby całkowitej.

coś takiego:

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

EDIT - Rozwiązanie:
(do zaokrąglania i rozliczeń liczbę zmiennoprzecinkową do pożądanej precyzji).

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

Odpowiedz

29

Można również użyć ".*" o zmiennej punktów patrz http://www.cplusplus.com/reference/cstdio/printf/ (odnosi się do C++, ale formatami są podobne)

.number: W, A, E, e, f i Specyfikatory F: jest to liczba cyfr, która ma być wydrukowana po kropce dziesiętnej (domyślnie jest to 6).

...

*. Precyzja nie jest określona w ciągu formatu, ale jako argument dodatkowa wartość całkowita poprzedzającym argument, że ma do być sformatowany.

Na przykład:

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

wyjściowa:

42.35 
+0

Dziękuję, że rozwiązuje mój problem. –

15

Można użyć gwiazdki na to zbyt, zarówno dla szerokości pola i dokładności:

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

patrz na przykład this reference.

+0

Dzięki Joach, to jest to, czego szukać. –

+1

+1 za link do części "C" w 'en.cppreference.com' - dodany do zakładek :) –

Powiązane problemy