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 txtEndwert

    fStartwert = atof(txtStartwert);
    fEndwert = atof(txtEndwert);
    Schrittgroesse = 1 / pow(10,AnzahlStellenMax); // ist auch ein float

    while (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.071

    es 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


Anmelden zum Antworten