Arredondamento de valores.

Delphi

23/01/2004

Preciso que o valor da variavel Anterior:=21.112,854707 fique com o valor de 21.112,86 como faço?


Host

Host

Curtidas 0

Respostas

Fabio.hc

Fabio.hc

23/01/2004

Tente assim:

function Arredondar(Valor: Double; Dec: Integer): Double;
var
  Valor1,
  Numero1,
  Numero2,
  Numero3: Double;
begin
  Valor1:=Exp(Ln(10) * (Dec + 1));
  Numero1:=Int(Valor * Valor1);
  Numero2:=(Numero1 / 10);
  Numero3:=Round(Numero2);
  Result:=(Numero3 / (Exp(Ln(10) * Dec)));
end;


Esta função arredonda este numero 21.112,854707 para 21.112,85

Se vc prescisa arredondar para este numero 21.112,86 ou arredondar qualquer numero sempre para o maior tente assim:

procedure TForm1.Button1Click(Sender: TObject);
var num1:Double;
begin
   num1:=StrToFloat(edit1.text);
   num1:=Arredondar((num1+0.005),2);
   Label1.Caption:=FloatToStr(num1);
end;



GOSTEI 0
Quintelaj

Quintelaj

23/01/2004

vc pode definir o modo em que vc faz o arrendondamento usando a função RoundTo() e configurar o tipo de arrendondamento com a função SetRoundMode

estão na unit Math


GOSTEI 0
Blivio

Blivio

23/01/2004

Use a função [color=red:b33f077d32]RoundTo[/color:b33f077d32] da seguinte forma:

suponha que você queira arredondar duas casas decimais da variável vExemplo, inicialmente com o valor 2254,6367;

vExemplo := RoundTo(vExemplo, -2); //para duas casas após a vírgula (resultado = 2254,64)
vExemplo := RoundTo(vExemplo, 2); //para duas casas antes da vírgula (resultado = 2300)
vExemplo := RoundTo(vExemplo, -3); //para três casas após a vírgula (resultado = 2254,637)
vExemplo := RoundTo(vExemplo, 3); //para três casas antes da vírgula (resultado = 2000)

Observe que o 1.º parâmetro é a variável ou o valor a ser arredondado, enquanto o 2.º parâmetro indica se o arredondamento deve ser feito antes ou após a vírgula. Se quiser após a vírgula (que é o normal), passe um nº inteiro negativo como o 2.º parâmetro.

Não esqueça que para este exemplo, foi copiada apenas uma pequena parte do programa, ou seja, a variável usada (vExemplo) não foi declarada e nem outras opções também. Declare a unit ´Math´ (ex.: uses Math) para que o programa funcione.

Obs.: Esta função RoundTo existe no Delphi 6 pois foi testada nele. Com certeza seus sucessores devem tê-la mas, quanto aos antecessores, não tenho certeza.

Espero ter ajudado em alguma coisa e, sempre que sei alguma coisa, tenho enorme satisfação em compartilhar o conhecimento.


GOSTEI 0
Fabio.hc

Fabio.hc

23/01/2004

Preciso que o valor da variavel Anterior:=21.112,854707 fique com o valor de 21.112,86 como faço?


De acordo com o problema acima só a função RoundTo não resolve.
Porque o alexgpedroso quer arredondar com 2 casas decimais sempre para cima, independente do valor da 3ª casa decimal. Para resolver usando a função RoundTo, foi o seguinte:

procedure TForm1.Button1Click(Sender: TObject); 
var num1:Double;
begin
   num1:=StrToFloat(edit1.text);
   num1:=RoundTo((num1+0.005),-2);
   Label2.Caption:=FloatToStr(num1);
end;



Quando passei a função para arredondar eu usava o Delphi5, a partir de hoje estou usando o Delphi7, vou rever as minha funções.


GOSTEI 0
POSTAR