Einzelnen Beitrag anzeigen

Ghostwalker

Registriert seit: 16. Jun 2003
Ort: Schönwald
1.299 Beiträge
 
Delphi 10.3 Rio
 
#23

AW: Runden ohne nachfolgende Nullen

  Alt 13. Mär 2017, 12:15
@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
Uwe
e=mc² or energy = milk * coffee²
  Mit Zitat antworten Zitat