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:
Função funciona perfeitamente, muito agradecido, pois a roundto do delphi não estava suprindo a necessidade do nosso sistema.
Grato.
Parabéns Gustavo. A lógica funciona lindamente.
Muito bom .... Parabéns e Obrigado
Postar um comentário