Einzelnen Beitrag anzeigen

Benutzerbild von rapante
rapante

Registriert seit: 3. Jun 2009
Ort: OPR
172 Beiträge
 
Delphi 12 Athens
 
#1

kaufmännisch runden

  Alt 26. Nov 2013, 16:53
Hallo,
inder Code-Lib gibt es eine Funktion fürs kaufmännische Runden von shmia:
http://www.delphipraxis.net/50081-ka...ch-runden.html

Leider musste ich fesstellen, dass diese Funktion nicht zuverlässig funktioniert.
Im folgenden Beispiel erhalte ich 2 unterschiedliche Werte (einmal wird ab- und einmal wird aufgerundet):
Delphi-Quellcode:
var
  x,y : Extended;
  resx, resy: Extended;
begin
  y := 17.325;
  resy := RoundX(y,2);

  //ergibt 17.325
  x := ((275 - 27.5) / 100) * 7 ;
  resx := RoundX(x,2);

  showmessage(FloatToStr(resx) + ' | ' + FloatToStr(resy));
end;

function RoundUp(X: Extended): Extended;
begin
   Result := Trunc(x) + Trunc(Frac(x) * 2);
end;

function RoundX(const Value:Extended; const nk:Integer): Extended;
var
   multi: Extended;
begin
   multi := IntPower(10, nk);
   Result := RoundUp(Value*multi) / multi;
end;
Der zweite Trunc-Befehl in RoundUp() gibt 0 anstatt 1 zurück.
Ursache ist wohl die Genauigkeit von Extended. Wie lässt sich das am besten vermeiden?
Micha
  Mit Zitat antworten Zitat