Einzelnen Beitrag anzeigen

Thomas Feichtner

Registriert seit: 30. Nov 2007
Ort: Rum
137 Beiträge
 
Delphi 10.4 Sydney
 
#18

AW: Re: runden bis auf 2 stellen hinterm komma, 0 nicht wegschne

  Alt 23. Aug 2010, 11:57
Hmmm. Interessante Diskussion. Ich verwende einfach:

Delphi-Quellcode:
Function Aufrunden (Const aValue : Extended; aDecimals : Byte) : Extended;
Var
  aDivider : Extended;

Begin
  aDivider := Power (10,aDecimals);
  If aValue>0 Then
    Result := Trunc (aValue*aDivider + 0.5) / aDivider
  else
    Result := Trunc (aValue*aDivider - 0.5) / aDivider;
End;
Mit dieser Funktion habe ich auch nicht immer den richtigen Wert (xRound(2.51 * (100 - 74.5) / 100, 4)) bekommen

jetzt habe ich die Funktion ein wenig umgebaut. Bis jetzt funktionierts.
Delphi-Quellcode:
function xRound(e: Extended; d: Integer ): Extended;
var
  nWert1: Extended;
  nTemp1: Currency;
begin
  nWert1 := e;
  { Zuerst Zahl multiplizieren, damit diese als Currency arbeiten kann
    damit bei xRound(2.51 * (100 - 74.5) / 100, 4) = 0.6401 auskommt und nicht
    0.64 }

  nTemp1 := e * IntPower(10, d - 1);
  if nTemp1 < 0.0 then
    nTemp1 := Trunc(nTemp1 * IntPower(10, 1) - 0.5 ) / IntPower(10, 1)
  else
    nTemp1 := Trunc(nTemp1 * IntPower(10, 1) + 0.5 ) / IntPower(10, 1);
  nWert1 := nTemp1 / IntPower(10, d - 1);
  { Jetzt normal runden -> sollte nicht mehr nötig sein }
  if nWert1 < 0.0 then
    Result := Trunc(nWert1 * IntPower(10, d) - 0.5 ) / IntPower(10, d)
  else
    Result := Trunc(nWert1 * IntPower(10, d) + 0.5 ) / IntPower(10, d);
end;
mfg

Thomas Feichtner
  Mit Zitat antworten Zitat