Ł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
  •