[VC++] Kaufmännisches Runden, aber wie?

r00f

Lt. Junior Grade
Registriert
Nov. 2005
Beiträge
500
Tach Boardis,

ich brauch einen Code zum kaufmännischem Runden in Visual C++ Express.

Will damit folgendes erreichen.

1 Artikel wird mehrmals gekauft mit unterschiedlichen EKs, daraus soll nun der Misch-EK errechnet werden.
Der errechnete Wert sollte natürlich mit 2 Nachkommastellen ausgegeben werden.

Ich weis das ihr eine Antwort wisst.
Danke :)
 
Zuletzt bearbeitet:
Vorwort:
Mit Fließkommazahlen rechnen ist widerlich, weil sich nicht alle Nachkommazahlen darstellen lassen! Eine Zahl x,5 könnte vom Rechner als x,49999999999 dargestellt werden (stimmt jetzt wahscheinlich nicht, aber das Prinzip sollte erkannt werden).

Jetzt zum Thema.
Nehmen wir mal an, dass du den Preis eines Artikels als Fließkommazahl float speicherst:
float preis1 = 12.99; // in Euro
float preis2 = 4.24;


Gemischt wäre das ja dann:
float mix = (preis1 + preis2) / 2; // = 8.615 (kaufmännisch 8.62, weil ab 5 wird aufgerundet)

Du willst nun wissen ob die dritte Nachkommastelle größer gleich 5 oder kleiner 5 ist.
Dazu würde ich nun in der Zahl das Komma nach der dritten Nachkommastelle setzen und dann die letzte Ziffer anschauen.
int nichtGerundet = mix * 1000; // das ist eine 8615.0 gecastet auf ein Integer 8615
Code:
// Mit der Modulorechung schneidest du alles bis auf die "Einerstelle" aus der Zahl raus
int gerundet;
if( (nichtGerundet % 10) < 5 ) {  
   // jetzt musst du abrunden
   gerundet = nichtGerundet - (nichtGerundet % 10);
}
else {
   // und jetzt aufrunden
   gerundet = nichtGerundet - (nichtGerundet % 10);
   gerundet += 10;
}
Falls du die gerundete Zahl wieder als float willst und mit dem Komma an der richtigen Stelle, dann musst du halt wieder durch 1000 teilen:
float schoenGerundet = gerundet / 1000; // 8,62
 
Zurück
Oben