Calculos - truncar casas decimais

Top  Previous  Next

// Literalmente trunca o valor double.

// Exemplo:  Trunca( 12.596   ) ===>  12.59

//           Trunca( -3.09945 ) ===>  -3.09

//           Trunca( 6.1      ) ===>  6.1

function Trunca(const Valor:Double; Decimais:Integer = 2): Double;

var

  I, C  : Integer;

  S, S2 : String;

  V     : Boolean;

begin

  S := FloatToStr(Valor);

  C := 0; V := False;

  For I := 1 to Length(S) do

  begin

    if not V then V := S[I] = ',';

    S2 := S2 + S[I];

    if V then Inc(C);

    if C > Decimais then Break;

  end;

  Result := StrToFloat(S2);

end;

 

-------------------------------------------------------------------------

Como "truncar" valores reais para apenas n casas decimais?

 

{ Às vezes você precisa considerar apenas duas casas de valores

  reais, mas o Delphi não oferece algo pronto para isto. Se

  usarmos funções como Round que vem com o Delphi, o valor será

  arredondado (e não truncado). Com Round() o valor abaixo será

  135.55 (e não 135.54) com duas casas decimais.

}

 

ValorReal := 135.54658;

 

{ Somente a parte inteira - nenhuma casa decimal }

X := Trunc(ValorReal); // X será 135

 

{ Duas casas }

X := Trunc(ValorReal * 100) / 100// X será 135.54

 

{ Três casas }

X := Trunc(ValorReal * 1000) / 1000// X será 135.5465

 

Observações:

 

Isto pode não funcionar se ValorReal for muito alto. Isto por 

causa da multiplicação que poderá estourar a capacidade do tipo 

em uso. Lembre-se: os tipos reais aceitam valores muuuiiiito 

altos.