Double Wert runden ?!



  • Hallo,

    ich verzweifel gerade an einem "relativ" einfachen Problem 🙄

    Wenn ich versuche (Beispiel):

    #define ROUNDTOINT(v) (int)(((v*10.)+5)/10)
    
    int nDocWidth  = 10875;
    int nPageWidth = 4082;
    int nMaxPage   =  ROUNDTOINT(nDocWidth/nPageWidth); //erg = 2,6641...
    

    auf eine Ganzzahl zu runden, bekomme ich "2" raus 😕 😕

    Falls es ein Compilier Problem ist, ich benutze VC++6 Prof. Ed.



  • Das Einfachste wäre wohl:

    int nMaxPage   =  ROUNDTOINT((nDocWidth/nPageWidth)+0.5);
    

    (wobei ich ROUNDTOINT nicht kenne, anscheinend schneidet es lediglich die Nachkommastellen ab?)



  • AndRo67 schrieb:

    Das Einfachste wäre wohl:

    int nMaxPage   =  ROUNDTOINT((nDocWidth/nPageWidth)+0.5);
    

    (wobei ich ROUNDTOINT nicht kenne, anscheinend schneidet es lediglich die Nachkommastellen ab?)

    😕 Danke für die schnelle Antwort, aber bei Verwendung dieser Lösung
    kommt, "1" raus mit den selben Zahlen



  • Das ist ja auch großer Blödsinn, was ich geschrieben habe 🙄

    Der Fehler bei dir ist, dass du das ROUNDTOINT-Makro mit dem Ergebnis der Klammer aufrufst.
    In der Klammer nimmst du aber bereits eine Integer-Division (Zähler und Nenner sind int) vor, die von sich aus die Nachkommastellen abschneidet.
    Du rufst also ROUNDTOINT(2) auf was natürlich 2 ergibt...

    Du solltest also die Division als Fließkomma-Operation durchführen, beispielsweise:

    nMaxPage   =  ROUNDTOINT((double)nDocWidth/nPageWidth);
    

Anmelden zum Antworten