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. |