Fehler bei Schleife mit float-Werten
-
Hi Leute,
habe eine while Schleife und diese springt mir leider immer vor dem letzten Wert raus. Habe keine Ahnung wodran das liegen könnte.Das ganze soll einen Filter aus Navision auflösen:
[code]
CString txtStartwert = txteingabe.Mid(0,txteingabe.Find('.') );
// txtStartwert ist der fordere Teil
CString txtEndwert = txteingabe.Mid(txteingabe.Find('.') + 2);
// txtEndwert ist der hintere Teil
txtEndwert = txtEndwert.Mid(0,txtEndwert.GetLength() - 1 );
// Abschneiden des '*' von txtEndwertfStartwert = atof(txtStartwert);
fEndwert = atof(txtEndwert);
Schrittgroesse = 1 / pow(10,AnzahlStellenMax); // ist auch ein floatwhile (fStartwert <= fEndwert) {
fStartwert += Schrittgroesse;
}
Klappt bei mir nicht z.B für startwert 490 und Endwert 611...
Kann mir einer helfen ???
-
Unsinn nehme das geschriebene zurück....
Ne ich habe meinen Kaudawelsch zurückgenommen *g*
Ich gucke mir aber gerade die Schleife an und probiere mal aus juckt mich jetzt auch mal das Prob.Hellsgore
-
Nimmst du jetzt was zurück oder soll ich was zurücknehmen ???
-
Servus,
also habe jetzt mal reingeguckt. Also du weisst ja schon das wenn z.B.
Schrittgröße = 1 / pow(10,2);
kein 0.01 ergibt sondern 0.099998 oder so also die Kommastellen ausfüllt?
soll das so sein? sonst verstehe ich die Schrittgröße in deinem Fall nicht.Hellsgore
-
habe ich mir auch schonmal überlegt, nur leider
funktioniert das ganze mit "hartem" 0.1f genausowenig...
-
Mir ist da eine Idee gekommen. Also wenn du weisst wieviel Nachkommastellen du hast dann kannst du diese doch auf eine 10ner Potenz verwenden. 3 Nachomma = 10³ bzw. pow(10,3). Aus diesem Wert machste ein Int. Du nimmst den Startwert multiplizierst den mit 10³ addierst einen drauf und teilst ihn dann wieder durch 10³. So kannst du die float Addierung umgehen.
Hellsgore
Nachtrag:
Bsp.
Startwert = 490.456
490.456 * 10³ = 490456
490456 + 1 = 490457
490457 / 10³ = 490.457
denn kannst du dann wieder Vergleichen mit dem Endwert
-
Sorry, hab ich vergessen zu erwähnen :
Alle Werte sind kleiner Null und mir gehts im Grunde darum ,
dass die Integerzahlen "07 nicht gleich 7" und "006 nicht gleich 6" sein sollen. Deswegen benutze ich ja nur Floatwerte...
-
Ja du kannst doch das gleich darauf anwenden....
Startwert = 0.070
0.070 * 10³ = 70
70 + 1 = 71
71 / 10³ = 0.071es geht doch immernoch darum das du die schleife durchzählen lassen willst oder?
Hellsgore
-
Wunderbar Hellsgore,
wer lesen kann ist klar im Vorteil !!!
Bedanke mich weit über dem Durchschnitt bei dir und hoffe dir auch mal helfen zu können...
-
Hehe Kein Ding
*winke*Hellsgore