Einzelnen Beitrag anzeigen

Benutzerbild von eddy
eddy

Registriert seit: 4. Jan 2003
Ort: Sachsen
573 Beiträge
 
Delphi 5 Professional
 
#13

Re: Auf 2 stellen Runden

  Alt 30. Okt 2007, 12:22
Hallo Leute,

das Stichwort "bankers rounding" hat's gebracht, man muß eben wissen, wonach man suchen muß!

Allerdings kommt "bankers rounding" mit jedem Taschenrechner in Konflikt. Und auf einer Rechnung sollten die Zahlen nun mal stimmen und nicht von der Berechnung mit einem Taschenrechner abweichen. Egal welche logische oder historische Erklärung es für die Abweichung gibt.

Das mathematischen Runden liefert ein Ergebnis, das ein Taschenrechner auch her gibt.

Delphi-Quellcode:
//liefert auf nk-Stellen mathematisch gerundete Zahl r zurück
// MathRound <--> bankers rounding nur bei 0.005
function mround(r : double; nk : integer = 2) : double;
var
  diff,
  r2,
  multi: double;
begin
  r2 := abs(r);
  multi:=IntPower(10, nk); // uses Math
  diff := Frac(r * multi); // Nachkommaanteil von r
  // if diff = 0.5 versagt wg. exponentiell kleiner Abweichungen
  if round(diff * multi) / multi = 0.5
    then r2 := r2 + 0.01 / multi;
  if r >= 0
    then Result := round(r2 * multi) / multi
    else Result := -round(r2 * multi) / multi;
end;
mfg
eddy
  Mit Zitat antworten Zitat