Problema com roundto

Delphi

11/11/2004

Pessoal estou com problema serio (uso delphi 6)...
é o seguinte no primeiro exemplo o roundto arredonda pra baixo:
f:=RoundTo(1183.245, -2);   

e nesse outro pra Cima:
f:=RoundTo(1.235, -2);        


Alguém sabe me dizer o pq ?Preciso que arredonde pra cima quando for >= 5 e pra baixo < 5 ...tentei usar setroundmode mas tb naum deu certo ....


Alexandresbo2

Alexandresbo2

Curtidas 0

Respostas

Marcelo Saviski

Marcelo Saviski

11/11/2004

Se você usar só o [color=green:d8d11d159e]Integer := Round(nº)[/color:d8d11d159e] funciona?


GOSTEI 0
Alexandresbo2

Alexandresbo2

11/11/2004

Caro colega f é um variavel real;
Gostaria o seguinte :
f:=RoundTo(1183.245, -2); {retornar 1183,25 mas ele retorna 1183.24}
f:=RoundTo(1.235, -2);        {aqui ele faz certo 1.24}

até 4 arredondar pra baixo e maoir que 4 pra cima


GOSTEI 0
Alexandresbo2

Alexandresbo2

11/11/2004

Pessoal estou começando a ficar preocupado fiz novos testes em
Delphi 6 e 7 com roundto e os resultados foram preocupantes:
roundto(1.235,-2)-->1.24
roundto(1.245,-2)-->1.25
roundto(1.255,-2)-->1.25
roundto(1.265,-2)-->1.26
roundto(1.275,-2)-->1.27
roundto(111862.235,-2)-->111862.23
roundto(111862.245,-2)-->111862,24
roundto(111862.225,-2)-->111862,23

quer dizer naum faz arredondamento correto... o problema maior é que por curiosidade testei em ´VB´ e ´C´ e eles tb naum funcionam! O que fazer(até 4 arredondar pra baixo maior que 4 pra Cima)?


GOSTEI 0
Emerson Nascimento

Emerson Nascimento

11/11/2004

função alternativa:

function RoundTo2(const AValue: Double; const ADigit: TRoundToRange): Double;
var
    LFactor: Double;
begin
    LFactor := IntPower(10, ADigit);
    Result := Round((AValue / LFactor) + 0.05) * LFactor;
end;


GOSTEI 0
Fabricio Rocha

Fabricio Rocha

11/11/2004

Muito obrigado, cara! Me ajudou muito a sua função!
GOSTEI 0
Fabricio Rocha

Fabricio Rocha

11/11/2004

função alternativa:

function RoundTo2(const AValue: Double; const ADigit: TRoundToRange): Double;
var
    LFactor: Double;
begin
    LFactor := IntPower(10, ADigit);
    Result := Round((AValue / LFactor) + 0.05) * LFactor;
end;



Muito obrigado, cara! Me ajudou muito a sua função!
GOSTEI 0
Alberto

Alberto

11/11/2004

Olá.
Já tive problemas com arrendondamento:
Eu estava usando uma variavel do tipo Extended, fiz vários testes
e nao conseguia descobrir onde estava o erro.
Troquei o tipo da variável para Currency e funcionou corretamente.
Faça um teste e verifique o que acontece no seu caso.
GOSTEI 0
POSTAR