Witam,
jestem hobbistą i szczerze to nie uważałem się do tej pory za nooba no ale cóż... chyba jednak zmienię zdanie.
Otóż zadanie jest proste:
Program(w konsoli) ma wyświetlić wynik z dokładnością do 2 miejsca po przecinku. Proste, trzeba użyć fixed i setprecision i gotowe.
float mojfloat=wynik;
cout<<fixed<<setprecision(2)<<mojfloat<<endl;
Tylko że jest haczyk - wszelkie zera na końcu muszą zostać skrócone, czyli np wynik 0.200000 powinien zostać wyświetlony jako 0.2 a nie 0.20 jak by to było w wypadku poprzedniego przykładu. No więc pomyślałem sobie że wystarczy zrobić konwersje z typu float na typ double...
double mojdouble=wynik;
cout<<mojdouble<<endl;
I jakież było moje zaskoczenie, kiedy okazało się że mojdouble wcale nie jest już typu double! Np dla wyniku 0.123456 program wyświetla 0.123456 co oznacza, że w jakiś sposób mojdouble w rzeczywistości stał się floatem! Postanowiłem spróbować jawnej konwersji
double mojdouble=static_cast<double>(wynik);
cout<<mojdouble<<endl;
lecz rezultat był taki sam. Nie mam pojęcia co tu się dzieje, z jakiegoś powodu zachodzi lewostronna(WTF!?!) konwersja i do tego niejawna; zamiast przekonwertować float na double program woli przekonwertować double na float. Myślę, że chodzi tutaj o utratę precyzji jaka nastąpiłaby przy takiej zamianie i to przed nią wzbrania się program/kompilator ale ja po prostu muszę zamienić float na double nawet za cenę utraty dokładności. Jak najłatwiej to obejść?