Fórum Arredondamento de valores. #208815
23/01/2004
0
Host
Curtir tópico
+ 0Posts
23/01/2004
Fabio.hc
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
23/01/2004
Quintelaj
estão na unit Math
Gostei + 0
28/01/2004
Blivio
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
28/01/2004
Fabio.hc
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
Clique aqui para fazer login e interagir na Comunidade :)