PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : C++: Runden von double zu int



arfman
18.08.05, 19:15
Hallo,

wie kann ich in C++ ein double korrekt auf ganze Zahlen runden? (Also, kaufmännisches Runden). Der normale typcast wirkt wie floor(d) und rundet nur ab :(

/edit: er rundet jetzt...

breite[i] = ((int)b[i] == (int)(b[i]+0.5)) ? (int)b[i] : (int)(b[i]+0.5); // b[i] < .5? abrunden : aufrunden
start[i] = ((int)s[i] == (int)(s[i]+0.5)) ? (int)s[i] : (int)(s[i]+0.5); // s[i] < .5? abrunden : aufrunden

fürchte nur, der Algorithmus ist nicht sehr optimal ;)

sirmoloch
18.08.05, 19:33
Du brauchst lround() - zumindest ist es so in C, aber in C++ sollte ja ein Äquivalent vorhanden sein.

Kleines Beispiel:


#include<stdio.h>

/* lround() gibt den fertigen und korrekt
* gerundeten int-Wert zurück.
*
* cc -lm beispiel.c
*
*/

int main(){
double a=1.33, b=1.55;

printf("%i\n",lround(a));
printf("%i\n",lround(b));

return 0;
}

Thomas Engelke
18.08.05, 20:55
Da gab's doch immer einen sehr einfachen Trick: Man addieren 0.5 und floore dann.

TME

ness
18.08.05, 21:18
template<class T,class F> //gedacht für fließkommadatentypen
inline T runde_cast(F d)
{
return static_cast<T>(d>0?d+0.5:d-0.5);
}benutz man wie
double d=4.7;
int a=runde_cast<int>(d);