Ładny brzuch
czesc, mam taki problem, ze jak wpisuje do jakiegos Edit'a liczbe zmiennoprzecinkowa zamieniam n float , to ona nie jest dokladnie taka jak ja wpisalem np.
wpisuje = 1,2 ... otrzymuje = 1,20000004768372
wpisuje = 1,7 ... otrzymuje = 1,70000004768372
wpisuje = 1,1 ... otrzymuje = 1,10000002384186
ale
wpisuje = 1,5 ... otrzymuje = 1,5
wpisuje = 1 ... otrzymuje = 1
dlaczego ?? i jak to obejsc
Problem jest taki, e StrToFloat zamienia na double nie float, wic z td bdy w konwersji (tak samo FloatToStr przyjmuje double). Wic:
1.2 -> StrToFloat -> 1.20000000000000
1.20000000000000 -> float -> 1.2000000
1.2000000 -> FloatToStr -> 1,2000000???????
i wanie te ? to s bloki pamici o niznananej (losowej) wartoci.
to jak sie tego ? pozbyc i dlaczego dla 1,5 jest dobrze
edit
zrobilem cos takiego, ale to jakos srednio dziala
ceil(liczba*10)/10
edit
wlasciwie nie dziala ;]
zrobilem taki maly tecsik:
void __fastcall TForm1::Button1Click(TObject *Sender) { AnsiString liczba1,liczba2; liczba1 = Edit1->Text; liczba2 = Edit2->Text; float suma = StrToFloat(liczba1) + StrToFloat(liczba2); Edit3->Text = liczba1; Edit4->Text = liczba2; Edit5->Text = FloatToStr(suma); }
i jak wpisze 1,2 oraz 1,3 jest dobrze ale jak podam 1,2 i 1,9 to w sumie mam 3,09999990463257
edit
...ale ze mnie ciemniak wystarczy ze suma bedzie double i wszystko gra
dzieki za podowiedz Real_Noname
Uytkownik KodeG edytowa ten post 23 grudzie 2005, 15:34
zanotowane.pl doc.pisz.pl pdf.pisz.pl zsf.htw.pl
wpisuje = 1,2 ... otrzymuje = 1,20000004768372
wpisuje = 1,7 ... otrzymuje = 1,70000004768372
wpisuje = 1,1 ... otrzymuje = 1,10000002384186
ale
wpisuje = 1,5 ... otrzymuje = 1,5
wpisuje = 1 ... otrzymuje = 1
dlaczego ?? i jak to obejsc
Problem jest taki, e StrToFloat zamienia na double nie float, wic z td bdy w konwersji (tak samo FloatToStr przyjmuje double). Wic:
1.2 -> StrToFloat -> 1.20000000000000
1.20000000000000 -> float -> 1.2000000
1.2000000 -> FloatToStr -> 1,2000000???????
i wanie te ? to s bloki pamici o niznananej (losowej) wartoci.
to jak sie tego ? pozbyc i dlaczego dla 1,5 jest dobrze
edit
zrobilem cos takiego, ale to jakos srednio dziala
ceil(liczba*10)/10
edit
wlasciwie nie dziala ;]
zrobilem taki maly tecsik:
void __fastcall TForm1::Button1Click(TObject *Sender) { AnsiString liczba1,liczba2; liczba1 = Edit1->Text; liczba2 = Edit2->Text; float suma = StrToFloat(liczba1) + StrToFloat(liczba2); Edit3->Text = liczba1; Edit4->Text = liczba2; Edit5->Text = FloatToStr(suma); }
i jak wpisze 1,2 oraz 1,3 jest dobrze ale jak podam 1,2 i 1,9 to w sumie mam 3,09999990463257
edit
...ale ze mnie ciemniak wystarczy ze suma bedzie double i wszystko gra
dzieki za podowiedz Real_Noname
Uytkownik KodeG edytowa ten post 23 grudzie 2005, 15:34