@all, ich versuche float Werte zu runden also auf bzw. abrunden und dann als Integer zu speichern. Habe schon einiges versucht aber irgentwie komme ich nicht auf einen Lösungsansatz. Hier noch ein paar Beispiele: 54.6547 --> 55 54.4357 --> 54 also so wie ein Taschenrechner ab 5 aufrunden darunter abrunden. Danke schon mal !!!!!!!:-) TOM
@ Horst-Otto, habe Deine Antwort erst als Scherz gesehen, jedoch nach einigen Gedanken gängen musse ich feststellen das man manchmal einfach nicht auf die einfachsten Dinge kommt. Danke für den Denkanstoss.
@ Peter, ich habe es bereit in eine funktion geschrieben die pos. und neg. Zahlen berücksichtigt. int Runden(float x) { int y; if(x>0) { x=x+0.5; } else { x=x-0.5; } y=x; return y; } Ist dies richtig ?!?!? Danke an alle!!!!!! TOM
Peter: Dein Code macht genau das gleiche, ist aber 1 Byte länger. Oder hab ich da was übersehen? A.K: Wobei?
y=floor(x+0.5) Ok, kürzer ist das eher nicht, weil man sich diese Routine einhandelt. Aber der Mathematik ist man damit ein Stück näher.
@ all, Danke für die zahlreichen antworten. Wenn ich Eure Beispiele sehe muss ich mich für meinen 10zeiler ja fast in der Ecke verkriechen :-). Bin leider noch nicht so fitt da ich mich erst seit neusen mit Controllern beschäftige. Aber auf alle Fälle habe ich anhand Eurer Syntax mal wieder was dazugelernt. DAMKE !!!!!!!!!!!!! TOM
Naja, wenn Du einmal scharf nachdenkst, solltest du x,5 nicht immer generell aufrunden oder abrunden, sondern abwechselnd auf- oder abrunden. Am besten bei x,5 immer zur nächsten geraden Zahl runden. Erst dann rundest Du mathematisch/statistisch korrekt. Das ganze nennt sich dann "round to even" oder "banker's rounding".
mit floor habe ich auch gerade was probiert, ist in <math.h> definiert. floor gibt aber einen double-Wert zurück. Ganz korrekt müsste es mit type-casting y=(integer)(floor(x+0.5)) heißen, dafür kann man gleich y=(integer)(x+0.5) schreiben. Das type-casting macht der Compiler meist automatisch. Die Frage ist, ob man das ganze nicht auch mit Integern lösen kann, wenn man z.b. die "Auflösung" gleich höher ansetzt. z.B. muss ich gerade die Periodendauer eines Timers ausrechnen. timer = TIMERFREQ / freq; //z.B. 5000000 / 5000 Dafür schreibe ich timer = 10 * TIMERFREQ / freq10; //z.B. 50000000 / 50000 freq10 ist die gewünschte Frequenz in Zehntel-Hertz. So spare ich den ganzen float-Kram. Es muss nicht unbedingt zehntel sein, es gehen auch "gerade" Werte wie 8tel oder 256stel. Bei 256stel bedeutet das, ich habe ein Byte nach dem Komma. Wenn ich dann runden will, zähle ich 1 auf den Vorkomma-Teil, wenn im Nachkomma-Byte das höchste Bit gesetzt ist.
"y=(integer)(floor(x+0.5)) heißen, dafür kann man gleich y=(integer)(x+0.5)" Ach ja? floor(-0.3) == -1.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.