Registriert seit: 30. Nov 2007
Ort: Rum
137 Beiträge
Delphi 10.4 Sydney
|
AW: Re: runden bis auf 2 stellen hinterm komma, 0 nicht wegschne
23. Aug 2010, 12: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
|
|
Zitat
|