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);