Floatwert beschneiden?
-
Kann man einen Float Wert beschneiden?
Ich arbeite mit einer Grafikkomponente und erhalte bei einer Position von 17.02 in "Wirklichkeit" laut FloatToStr = 17.02000021374849.
Ich möchte den Schmutz da hinten gern weg haben, damit ich richtig abfragen kann auf Grenzen. Weiss wer wie ich das hinbekomme oder hat nen Tipp?
Ich habe auch schon Werte gesehen die statt 10.01 dann 10.00999984897364 sind.
Die Werte sind erfunden, aber so ist das in der Art. Bin dadrauf gekommen, weil ich abfrage if (a>17.02) ... was ja nicht sein sollte
Beispiel so klappt es nicht
Memo1->Lines->Clear(); float fvalue = 17.02000012236746834; AnsiString tvalue = FloatToStrF(fvalue,ffFixed,10,2); Memo1->Lines->Add("AnsiString: "+tvalue); fvalue = StrToFloat(tvalue); Memo1->Lines->Add("Float: "+FloatToStr(fvalue));Ergebnis:
AnsiString: 17,02
Float: 17,0200004577637Float wird anschliessend wieder sone total brackige Zahl.
Einzigste Möglichkeit die ich jetzt sehen würde wäre den Float Wert einfach * 100 zu nehmen und Grenzen als Ganzzahl abzufragen. Geht es wirklich nicht anders?
-
Beim Vergleich reller Zahlen, egal ob sie vom Typ float, double oder long double sind, muß man deshalb immer auf Gleichheit innerhalb eines sehr kleinen Intevalles, meist epsilon genannt, prüfen, hier ein Beispiel:
float epsi; epsi = 10e-18; // sehr kleiner Wert if( abs(18.61 + 2.01 - 20.62) < epsi ) printf("Alles OK\n"); else printf("Hier ist immer noch was faul\n");
-
Interessante Version. Danke! Werd ich mal austesten.