Einzelnen Beitrag anzeigen

shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#11

Re: Plötzlich auftretenes Rundungsproblem

  Alt 15. Dez 2004, 14:49
Zitat von Sourcemaker:
ich bin gestern von einem Kunden über eine Rundungsproblematik hingewiesen worden.
Das Problem tritt bei den Funktionen FormatFloat und Str auf. Eine Berechnung die im
vorliegenden Fall 9,32 EUR ergeben müsste 3,45*3/0,9=9,315 wird durch die o.g. Funktionen
als 9,31 EUR ausgegeben.
Es gibt da zwei verschiedene Rundungsverfahren:
* Kaufmänisches Runden: bei x.5 wird immer aufgerundet
* "Banker's rounding": bei x.5 wird abwechselnd auf- und abgerundet

Delphi verwendet "Banker's rounding". Die Auf- und Abrundungen sollen sich in der Masse gegenseitig aufheben.
Kaufmännisches Runden geht so:
Delphi-Quellcode:
function CommercialRound(const X: Extended): Int64;
begin
  Result := Trunc(X);
  if Frac(Abs(X)) >= 0.5 then
    Result := Result + Sgn(X);
end;
Die Art & Weise, mit der die Funktion Round() arbeitet, hängt übrigens von der aktuellen
Einstellung des FPU Flags-Registers ab.
(Wahrscheinlich die Ursache für unterschiedlichem Verhalten von Round auf versch. Rechnern)
Andreas
  Mit Zitat antworten Zitat