Fórum Problema com roundto #258024

11/11/2004

0

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

Responder

Posts

11/11/2004

Marcelo Saviski

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


Responder

Gostei + 0

11/11/2004

Alexandresbo2

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


Responder

Gostei + 0

12/11/2004

Alexandresbo2

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)?


Responder

Gostei + 0

12/11/2004

Emerson Nascimento

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;


Responder

Gostei + 0

31/05/2018

Fabricio Rocha

Muito obrigado, cara! Me ajudou muito a sua função!
Responder

Gostei + 0

31/05/2018

Fabricio Rocha

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!
Responder

Gostei + 0

31/05/2018

Alberto

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

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar