Witam, chciałabym za pomocą cout wypisać liczby rzeczywiste z pewną dokładnością po przecinku ( np 4) ale tak by nie wypisywało mi nieznaczących zer. Może ktoś wie jak sie do tego zabrać?
cout.precision(x)
cout << zmienna_double;
za x wstaw to co chcesz, tylko to nie tylko miejsca po przecinku uwzględnia, ale też te przed przecinkiem
hmm no wiem że można w ten sposób... tylko że ja chce aby zawsze było x liczb po przecinku, bez względu na ilość cyfr w części całkowitej liczby i aby nie wypisywało mi nieznaczacych zer, wiec może masz jakiś inny pomysł?
albo użyj printf'a:
double pi = 3.14159265;
printf ("liczba pi jest równa %.4f\n", pi);
spowoduje to wypisanie na ekranie:
liczba pi jest równa 3.1415
więcej o printfie znajdziesz tutaj
Ale to nie wyświetla nieznaczących zer, przed chwilą sprawdzałem na wszelki wypadek.
@ceer:
nieznaczące zera u ciebie wypisze
zatem powiem tak:
korzystajac tylko z cout.precision(x) nie wypisze mi nieznaczacych zer, ale nie mam 100% pewnosci ile wypisze mi liczb po przecinku
natomiast jesli włacze flage
cout.setf(ios::fixed);
cout.precision(x);
to wypisze mi konkretnie x liczb po przecinku, ale również wypisze nieznaczące zera.
I chciałabym jednak skorzystać z cout a nie z printf'a.
Zatem może są jeszcze inne sugestie?
taki mały ot: wiesz, że te zera z tyłu to najczęściej przypadek? tylko malutki ułamek liczb rzeczywistych w skończonym binarnym rozwinięciu będzie się kończyć zerami po przeliczeniu do systemu dziesiętnego. oznacza to, że zwykle będziesz i tak wyświetlać cały śmietnik po przecinku.
jak to zrobić? chociażby sprintf + obcięcie wszystkich zer z końca zwróconego łańcucha.
Chyba muszę sie pogodzić z tymi printfami ;-P
nie :) mozna na strumieniach i stringach, cos a'la:
string format(double liczba, size_t decimals)
{ ostrstream tempstr;
tempstr << fixed << precision(decimals) << liczba;
string str = tempstr.str();
str.erase( str.rbegin(), find_if(str.rbegin(), str.rend(), not_eq('0')) );
return str;
}
cout << format(12.34, 4) << endl;
disclaimer: niekompilowane