Arredondamento de Variaveis - URGENTE !!!
15/12/2003
0
Estou precisando de alguma função de arredondamento que funcione !!!
Já usei o parâmetro que o delphi tem junto com a função ROUND (SETROUNDMODE), tbm ja usei o SIMPLEROUND, ROUNDTO, mas nenhum funciona !!!
Já usei tbm a seguinte função que peguei na internet:
=== INICIO DA FUNÇÃO ========
FUNCTION ROUNDNUM(VALOR:EXTENDED;DECIMAIS:INTEGER):EXTENDED;
VAR
I:INTEGER;
MULTIPLICADOR:INTEGER;
BEGIN
IF DECIMAIS > 15 THEN
DECIMAIS := 15
ELSE
IF DECIMAIS < 0 THEN
DECIMAIS := 0;
MULTIPLICADOR := 1;
FOR I:=1 TO DECIMAIS DO
MULTIPLICADOR := MULTIPLICADOR*10;
IF VALOR<>0 THEN
RESULT:=ROUND(VALOR*MULTIPLICADOR)/MULTIPLICADOR
ELSE
RESULT:=0;
END;
=== FIM DA FUNÇÃO ========
Mas nada funciona !
Façam o teste:
Exemplo de um valor que estou com problemas, a diferença é sempre de 1 centavo...
EXEMPLO:
Apliquem 5¬ em cima de 531,90
O resultado arredondando a terceira casa decimal é pra ser igual a 26,60; e as minhas funções me retornam 26,59.
Alguem tem a solução !!!
Quem tiver me ajude por favor...
Já usei o parâmetro que o delphi tem junto com a função ROUND (SETROUNDMODE), tbm ja usei o SIMPLEROUND, ROUNDTO, mas nenhum funciona !!!
Já usei tbm a seguinte função que peguei na internet:
=== INICIO DA FUNÇÃO ========
FUNCTION ROUNDNUM(VALOR:EXTENDED;DECIMAIS:INTEGER):EXTENDED;
VAR
I:INTEGER;
MULTIPLICADOR:INTEGER;
BEGIN
IF DECIMAIS > 15 THEN
DECIMAIS := 15
ELSE
IF DECIMAIS < 0 THEN
DECIMAIS := 0;
MULTIPLICADOR := 1;
FOR I:=1 TO DECIMAIS DO
MULTIPLICADOR := MULTIPLICADOR*10;
IF VALOR<>0 THEN
RESULT:=ROUND(VALOR*MULTIPLICADOR)/MULTIPLICADOR
ELSE
RESULT:=0;
END;
=== FIM DA FUNÇÃO ========
Mas nada funciona !
Façam o teste:
Exemplo de um valor que estou com problemas, a diferença é sempre de 1 centavo...
EXEMPLO:
Apliquem 5¬ em cima de 531,90
O resultado arredondando a terceira casa decimal é pra ser igual a 26,60; e as minhas funções me retornam 26,59.
Alguem tem a solução !!!
Quem tiver me ajude por favor...
Marfred
Curtir tópico
+ 0
Responder
Posts
15/12/2003
Xmagno
Veja se assim funciona:
Edit1.Text := FloatToStr(round(531.90 * 5 ) / 100 );
[]´s
xMagno.
Edit1.Text := FloatToStr(round(531.90 * 5 ) / 100 );
[]´s
xMagno.
Responder
16/12/2003
Marfred
Veja se assim funciona:
Edit1.Text := FloatToStr(round(531.90 * 5 ) / 100 );
[]´s
xMagno.
Cara, deu certo, mas eu preciso de uma função de arredondamento tipo, uma função genérica ! desse jeito, a função fica limitada a esse tipo de calculo (porcentagem). Queria uma função onde vc passasse um numero pra ela e ela arredondasse seguindo a regra matematica, se a terceira casa decimal for 5 ela arredonda a segunda casa pra cima.
Ex: 1,605 => 1,61
1,6055 => 1,61
1,606 => 1,61
São apenas exemplos...
Valew kra !
Responder
Clique aqui para fazer login e interagir na Comunidade :)