Wieso falscher Double-Wert



  • Hallo

    folgender Code:

    1. double dtest = 0.002396;
    2. dtest = Round(dtest,4);
    3. int itest = dtest * 10000;

    hier die Round-Funktion:
    double Round(double Zahl, unsigned int Stellen)
    {
    Zahl *= pow(10, Stellen);
    if (Zahl >= 0)
    Zahl = floor(Zahl + 0.5) ;
    else
    Zahl = ceil(Zahl - 0.5);
    Zahl /= pow(10, Stellen);
    return Zahl;
    }

    in Zeile 2) ist nach der Rundung in dtest (im Debugger) 0.00240000000
    --> das ist OK.
    in Zeile 3) ist nach dem Multiplizieren in itest die 23 ???? Kann mir das bitte jemand erklären? ist die Round-Funktion falsch? Rechnet der Compiler falsch?? Oder kann ich nicht mehr rechnen?

    Eine Lösung für das merkwürdige Verhalten habe ich schon
    (int)(Round(d_egpt*10000,0))
    - ich möchte nur wissen was da falsch läuft?

    Vielen Dank
    cu
    George



  • so viel ich weiss ist das deshalb weil fliesskomma zahlen intern nur als näherungswerte abgespeichert sind. du hast also nach dem runden nicht 0,0024 sondern eigentlich irgendwas wie 0,002399999... in deiner variablen. wenn du das dann mit 10000 multiplizierst hast du nicht 24,0 sondern 23,999999... dann wandelst du das ganze in eine integer zahl um, das heisst du schneidest die nachkommastellen ab, ergibt 23.



  • Vielen Dank ninguno,

    sowas ähnliches dachte ich mir schon --> aber trotzalledem krasser Fehler...

    cu
    George


Anmelden zum Antworten