Float to double!?!?! WTF

2015-02-19 17:39
0

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ść?

edytowany 1x, ostatnio: Veldoraan, 2015-02-19 17:45

Pozostało 580 znaków

2015-02-19 17:54
0

Czemu uważasz, że 0.123456 nie jest typu double ?

Pozostało 580 znaków

2015-02-19 17:55
0
Veldoraan napisał(a):

Np dla wyniku 0.123456 program wyświetla 0.123456 co oznacza, że w jakiś sposób mojdouble w rzeczywistości stał się floatem!

Yyy że jak? Dlaczego double nie może być wyświetlany jako 0.123456?

Google sugeruje, że nie istnieje eleganckie rozwiązanie. Można zamienić tę liczbę na string i obciąć zera na końcu.

A temat to WTF.

Pozostało 580 znaków

2015-02-19 17:56
0
Veldoraan napisał(a):

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!

Dlaczego tak uważasz?


"There are people who actually like programming. I don't understand why they like programming."
Rasmus Lerdorf

Pozostało 580 znaków

Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0