PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Kaufmännisches Runden ohne Nachkommastellen in C,C++



oderlachs
01.04.2013, 16:56
Hallo Freunde,
gibt es was "Vorgefertigtes" in den Libraries womit man kaufmännisch Runden kann, also 2,3 = 2 bzw 2,7 = 3 ? Ich möchte nicht zu Bascom greifen, nur um so eine fertige "Round Routine" zu bekommen. Da ich noch nicht so in jeden Winkel der C programmierung gelangt bin, geht es auch so über Typenconvertierung float zu int... bspw Runderwert = int(Floatwert + .5). Aber was frage ich da werde mal probieren, oder geht es noch einfacher ?
Danke schon mal..

Gerhard

PS Schon erledigt, war ja dummm danach zu fragen, aber ich hatte gerade nix zur hand um selber zu Probieren...

robocat
01.04.2013, 18:09
// korrektes auf- und abrunden von double werten
int d2i(double d)
{
return d<0?d-.5:d+.5;
}

Nur als Nachtrag: So geht es auch mit negativen Werten. Am µC würde man wohl lieber float nehmen, um Speicher und Rechenzeit zu sparen.

Grüße

oderlachs
01.04.2013, 19:19
Danke Robocat, das werde ich mir notieren, als schriftlicher Speicher, mein Speicher im Kopf ist schon etwas flüchtig geworden mit dem Alter ;)

Ich muss Spannungen auswerten, wo es nicht auf milliVolts ankommt, wohl aber auf glatte Zahlen...

Gruss Gerhard

robin
02.04.2013, 00:58
Double und Float ist eigentlich auf einem µC ohne FPU zu vermeiden, da es lahm ist und unnötig Speicher frisst.

Am einfachsten dürfte Festkomma Arithmetik sein und du addierst das erste bit nach dem Komma auf deine Ganzzahl. Ist es 0, ist dein Wert kleiner 0.5 ist es 1 ist er mindestens 0.5.
Wie man aber mit einem Festkomma unter C programmiert, weiß ich leider nicht.

Bei deinem Problem könntest du mMn. auch komplett auf Kommazahlen Verzichten, indem du mit mV rechnest un am Ende dann alles so weit verschiebst, dass Volt raus kommen und zum Schluss den Carry addiert.
Kommt aber ein bisschen auf die Messung an, ob es sich lohnt.
Wie groß ist denn deine Auflösung, deine Referenzspannung und dem entsprechen, wie viel mV hat ein bit?