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?