Problema com roundto
Pessoal estou com problema serio (uso delphi 6)...
é o seguinte no primeiro exemplo o roundto arredonda pra baixo:
e nesse outro pra Cima:
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 ....
é 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
Curtidas 0
Respostas
Marcelo Saviski
11/11/2004
Se você usar só o [color=green:d8d11d159e]Integer := Round(nº)[/color:d8d11d159e] funciona?
GOSTEI 0
Alexandresbo2
11/11/2004
Caro colega f é um variavel real;
Gostaria o seguinte :
até 4 arredondar pra baixo e maoir que 4 pra cima
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
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:
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)?
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
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;
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
11/11/2004
Muito obrigado, cara! Me ajudou muito a sua função!
GOSTEI 0
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;
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
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.
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