Ir para conteúdo
  • Cadastre-se

dev botao

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

Recommended Posts

  • Membros Pro
Postado

Bom dia a todos,

estou com um problema de arredondamento, gostaria de ver a opinião dos amigos.

valoricms.PNG.d236ad3b04b36874591248c9d877521e.PNG

Nessa figura, a soma total fica em 3166,86

Se eu fizer Select sum(VALORICMS) from DetailFiscal WHERE CODSEQ=:CODNOTA  fica 3166,88 por causa dos arredondamentos

Se eu fizer Select sum(Trunc(VALORICMS,2)) from DetailFiscal WHERE CODSEQ=:CODNOTA tambem fica 3166,88

Se eu fizer Select sum(CAST(VALORICMS AS NUMERIC(8,2))) from DetailFiscal WHERE CODSEQ=:CODNOTA fica 3166,89

Como eu poderia fazer para arredondar com o valor correto?

Grato a todos

 

 

 

 

 

 

 

  • Membros Pro
Postado
1 hora atrás, Leandro Araújo disse:

Boa tarde.
Qual banco de dados você usa e como está a precisão desses campos no banco?

Boa tarde Leandro, 

Firebird 3.0 e os campos monetarios utilizo Double Precision

 

Grato

Postado (editado)
17 horas atrás, rodrigoogioni disse:

Boa tarde Leandro, 

Firebird 3.0 e os campos monetarios utilizo Double Precision

 

Grato

Entendi.
No caso, aqui com MySQL usamos o tipo Decimal com escala/precisão de 25,10, ficando: Decimal(25,10), em alguns outros casos para quantidades e outros valores usamos o Double(25,10).

Deixamos o banco gravar um bom número de decimais, mesmo que não use, e tratamos o arredondamento nos cálculos do lado da aplicação usando o método SimpleRoundTo, não tivemos mais problemas com arredondamentos.
As máscaras dos campos também ficam dinâmicas, configuradas na inicialização do sistema conforme uma configuração pré-definida.

Não seria melhor você aumentar a quantidade de casas decimais para o banco gravar e tratar esses arredondamentos no código?
Outra coisa, tem algum outro tipo pra monetário no FireBird?

Editado por Leandro Araújo

Leandro Araújo, Analista de Sistemas.

  • 2 semanas depois ...
  • Membros Pro
Postado
Em 11/07/2019 at 08:58, Leandro Araújo disse:

Entendi.
No caso, aqui com MySQL usamos o tipo Decimal com escala/precisão de 25,10, ficando: Decimal(25,10), em alguns outros casos para quantidades e outros valores usamos o Double(25,10).

Deixamos o banco gravar um bom número de decimais, mesmo que não use, e tratamos o arredondamento nos cálculos do lado da aplicação usando o método SimpleRoundTo, não tivemos mais problemas com arredondamentos.
As máscaras dos campos também ficam dinâmicas, configuradas na inicialização do sistema conforme uma configuração pré-definida.

Não seria melhor você aumentar a quantidade de casas decimais para o banco gravar e tratar esses arredondamentos no código?
Outra coisa, tem algum outro tipo pra monetário no FireBird?

Bom dia,

Obrigado pela resposta,

Tem numeric(x,x), mas nao uso este.

Grato

  • Este tópico foi criado há 1948 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.