Ir para conteúdo
  • Cadastre-se

dev botao

Arredondamento utilizando RoundABNT


Onclick
  • Este tópico foi criado há 1662 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

Boa dia a todos!

Estou com um problema relativo ao erro do título, e não sei o procedimento correto a seguir.

Tenho os seguintes valores relativos a uma venda de produto por metro:

      Quantidade : 1,5

      Preço: 40,13

Na multiplicação 1,5 * 40,13, o resultado de 60, 195 ao ser passado como parâmetro para a rotina RoundABNT não retorna 60,20 e sim 60,19.

 

Tentei passar como parâmetro o resultado da multiplicação em variáveis Currency e Double também passei como parâmetro a própria multiplicação dos valores,  e o resultado sempre é 60,19.

Obrigado.

Link para o comentário
Compartilhar em outros sites

  • Membros Pro

Aparentemtente está errado mesmo. Veja a norma ABNT:

Citar

Quando o algarismo imediatamente seguinte ao último algarismo a ser conservado for 5 seguido de zeros, dever-se-á arredondar o algarismo a ser conservado para o algarismo par mais próximo. Conseqüentemente, o último a ser retirado, se for ímpar, aumentará uma unidade. Exemplo: 4,550 0 arredondados à primeira decimal temos: 4,6.

 

Gilson do Carmo
WindSoft Sistemas

Link para o comentário
Compartilhar em outros sites

  • Fundadores

Também não consegui reproduzir o problema... o teste abaixo, deu OK

  dblTotal := 1.5 * 40.13;
  CheckEquals( 60.20, RoundABNT(dblTotal, 2), 0.00001);   

 

Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Link para o comentário
Compartilhar em outros sites

3 horas atrás, windsoft disse:

Fiz um teste aqui com os valores que você citou e não tive problemas. O resultado foi 60,20 mesmo.

Segue o teste que fiz pra vc dar uma olhada.

image.png.042af83b769d7a431aae9229d269f199.png

image.png.c33331090e865f63baa61293c5545174.png

Eu fiz um teste com este código de Exemplo e o meu resultado continua sendo o 60,19

Abaixo estão o form de teste e os valores que estão sendo calculados dentro da função.

Aparentemente o problema que estou tendo é que a variável FracCalc da funcão RoundABNT, que recebe o resultado da parte fracionária de 19,5, não está recebendo o valor 50 e sim 49.

 

Capturar.PNG.b27f3a1177514fa96427040979b1b539.PNG

Capturar5.thumb.PNG.3b9fe14998c2164487866b6e05493db8.PNG

Capturar3.PNG.ae5fc4019410ab515240f2c4b1a73494.PNG

capturar4.png.d31af0b56b4cf87a2beb477d5a470b7d.png


Obrigado.

Capturar2.PNG

Link para o comentário
Compartilhar em outros sites

  • Fundadores

Deve ser algo no seu ambiente... (eu não tenho o Delphi 2010)...

Parece tudo correto com a RoundABNT... Reproduzi o mesmo código (com os mesmos tipos), e testei no Delphi Rio e Delphi 7.. em ambos funcionaram...

procedure TForm1.btCalcularClick(Sender: TObject);
var
  nQtd, nValor, nResultado: Double;
begin
  nQtd := StrToFloatDef(edQtd.Text, 0);
  nValor := StrToFloatDef(edValor.Text, 0);
  nResultado := nQtd * nValor;
  nResultado := RoundABNT(nResultado, 2);
  edResultado.Text := FloatToStr( nResultado );
end;

No Delphi Rio:

image.png

 

No Delphi 7

image.png

Verifique se você não tem modificações nos fontes do ACBr, que podem estar influenciando no resultado... na dúvida, baixe tudo novamente em outra pasta...

  • Curtir 1
Consultor SAC ACBr

Daniel Simões de Almeida
O melhor TEF, é com o Projeto ACBr - Clique e Conheça
Ajude o Projeto ACBr crescer - Assine o SAC

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.

Link para o comentário
Compartilhar em outros sites

  • Este tópico foi criado há 1662 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora
×
×
  • Criar Novo...

Informação Importante

Colocamos cookies em seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies, caso contrário, assumiremos que você está bem para continuar.

The popup will be closed in 10 segundos...