quinta-feira, 10 de novembro de 2011

Arredondamento Inteligente por Casa Decimal - Delphi

Função de Arredondamento.
Considerando ...um form chamado frmTeste.
A sintaxe Basica dela é ArredondaPorDecimal(valorAserArredondado,CasaDecimalQueSeraArredondado).
Caso o valor decimal a ser arredondado seja >=5 entao arredondara, caso contrario não.
Exemplos :
ArredondaPorDecimal(14,987,2).
Retorno := 14,99

ArredondaPorDecimal(14,924,2).
Retorno := 14,92



function frmTeste.ArredondaPorDecimal(valor:Real;casasDecimais:integer):Real;
var
Fator, Fracao: Extended;
begin
{Eleva o Valor 10 ao expoente mandado na variavel casasDecimais} 
Fator:= IntPower(10, casasDecimais);
  { Multiplica o valor pelo fator e faz a conversao de string e depois para float novamente para evitar arredondamentos. }
  valor:= StrToFloat(FloatToStr(valor* Fator));
{Pega a Parte Inteira do Numero}
  Result := Int(valor);
{Pega a Parte Fracionaria}
  Fracao:= Frac(valor);
{Faz a regra de arredondamento} 
if Fracao >= 0.5 then
    Result := Result + 1
else if Fracao <= -0.5 then
    Result := Result - 1;
{O valor Final inteiro divide por 100 para transformar em decimal novamente.}
  Result := Result / Fator;
end;

{By
Gustavo Luis H.
}

3 comentários:

Unknown disse...

Função funciona perfeitamente, muito agradecido, pois a roundto do delphi não estava suprindo a necessidade do nosso sistema.

Grato.

Unknown disse...

Parabéns Gustavo. A lógica funciona lindamente.

Unknown disse...

Muito bom .... Parabéns e Obrigado

Postar um comentário