Fonte: www.activedelphi.com.br
Veja nesta dica uma função que faz o arredondamento matemático de um número, assim como é feito pela calculadora
// <--- Faz arredondamento de forma matemática igual da calculadora
function TdmVendas.Arredondamento(Valor: Extended; Decimais: integer): Extended;
var
Factor, Fraction, Arred : Extended;
i : integer;
vFraction : string;
vlrFrac : Variant;
begin
Factor := IntPower(10, Decimais);
Valor := StrToFloat(FloatToStr(Valor * Factor));
Result := Int(Valor);
Fraction := Frac(Valor);
vFraction := floattostr(Fraction);
for i := 0 to Length(vFraction) do
begin
vlrFrac := Copy(vFraction,(Length(vFraction)-i),1);
if vlrFrac = ',' then
begin
if Arred > 0 then
Result := Result + 1;
Result := Result / Factor;
exit;
end;
vlrFrac := vlrFrac + Arred;
Arred := 0;
if vlrFrac > 5 then
Arred := 1;
end;
end;
Antes de compilar, não esqueça de declarar ao uses a unit Math.
// <--- Faz arredondamento de forma matemática igual da calculadora
function TdmVendas.Arredondamento(Valor: Extended; Decimais: integer): Extended;
var
Factor, Fraction, Arred : Extended;
i : integer;
vFraction : string;
vlrFrac : Variant;
begin
Factor := IntPower(10, Decimais);
Valor := StrToFloat(FloatToStr(Valor * Factor));
Result := Int(Valor);
Fraction := Frac(Valor);
vFraction := floattostr(Fraction);
for i := 0 to Length(vFraction) do
begin
vlrFrac := Copy(vFraction,(Length(vFraction)-i),1);
if vlrFrac = ',' then
begin
if Arred > 0 then
Result := Result + 1;
Result := Result / Factor;
exit;
end;
vlrFrac := vlrFrac + Arred;
Arred := 0;
if vlrFrac > 5 then
Arred := 1;
end;
end;
Antes de compilar, não esqueça de declarar ao uses a unit Math.
Nenhum comentário:
Postar um comentário