@Andidreas
Ähmm......also..entweder stimmt Wikipedia nicht oder Emba hat da nen Bug
RoundTo(2.3500,-1) ergibt 2.3 lt. Wiki sollte das aber 2.4 ergeben
Deshalb hab ich mir mal folgende Rundung gebaut:
Delphi-Quellcode:
TYPE
TRoundAlg = (raKfm,raSience);
function Rounder(alg:TRoundAlg;value:extended;decimalplaces:integer):extended;
implementation
function Rounder(alg:TRoundAlg;value:extended;decimalplaces:integer):extended;
var
pre,nex,tmp : extended;
pt : extended;
hlp : integer;
begin
pt := power(10.0,decimalplaces);
pre := int(value*pt);
nex := frac(value*pt);
case alg of
raKfm: begin
if (nex >= 0.5) then pre := pre+1.0;
result := pre/pt;
end;
raSience: begin
if (nex > 0.50) then pre := pre+1.0;
if (nex = 0.5) then
begin
tmp := Frac(pre/10)*10;
hlp := round(tmp);
if (hlp in [1,3,5,7,9]) then
pre := pre+1.0;
end;
result := pre/pt;
end;
end;
end;
Damit funzt es so wie es im Wiki beschrieben ist