Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Arredondamento DFe.Classes e NFe.Classes #1354

Open
ricardopdv opened this issue Jun 8, 2022 · 6 comments
Open

Arredondamento DFe.Classes e NFe.Classes #1354

ricardopdv opened this issue Jun 8, 2022 · 6 comments

Comments

@ricardopdv
Copy link

ola pessoal tem um tempo que nao me comunico. tudo corre bem com a lib gracas a Deus !.

Tenho tido um problema em algumas notas fiscais e notei que no meu programa estou usando a funcao arredondamento de dois locais diferentes.
A Arredondar do dfe.classes na conta 0.35 * 15.90 me retorna 5.56
Ja na Arredondar da nfe.classes a mesma conta retorna 5.57
A conta dá 5.565 acredito que a primeira esteja truncando e a segunda arredondando.
Nao sei se isso foi visto mas vou usar a da nfe.

Caso ajude em algo.
Agradeco a todos pois a lib é sensacional !!!!

@danilobreda
Copy link
Contributor

danilobreda commented Jun 12, 2022

Fala Ricardo, pessoalmente utilizo o padrão da ABNT de arredondamentos... que pelo que sei é o correto de ser utilizado!
segue meu código

public static decimal RoundABNT(this decimal dec, int digits)
{
    return Math.Round(dec, digits, MidpointRounding.ToEven);
}

Não utilizo do Zeus, pelo que vi ele usa o MidpointRounding.AwayFromZero
Agora não sei se o correto é .ToEvent ou como o do zeus :/

@ricardopdv
Copy link
Author

Fala Ricardo, pessoalmente utilizo o padrão da ABNT de arredondamentos... que pelo que sei é o correto de ser utilizado! segue meu código

public static decimal RoundABNT(this decimal dec, int digits)
{
    return Math.Round(dec, digits, MidpointRounding.ToEven);
}

Não utilizo do Zeus, pelo que vi ele usa o MidpointRounding.AwayFromZero Agora não sei se o correto é .ToEvent ou como o do zeus :/

Show vou testar aqui. So mandei a issue mesmo por conta de ter a mesma funcao se comportando de maneira diferente em duas libs. pode acabar causando com outros o que aconteceu comigo.

@robertorp
Copy link
Contributor

https://github.com/OpenAC-Net/OpenAC.Net.Core/blob/main/src/OpenAC.Net.Core/Extensions/DecimalExtensions.cs

Uso um código igual o Round dele , mas dei contrl c é v somente pra não ter que referenciar a lib toda.
No meu caso já deu BO por causa do round do C# , sefaz já me recusou por centavo de diferença o round do C# puro não faz corretamente o padrão ABNT é raríssimo acontecer mas aconteceu duas vezes com nós aqui da empresa, usamos esse código é funcionou perfeito.

@danilobreda
Copy link
Contributor

Fiz um programa comparando o exemplo que dei com esse passado, o resultado foi o mesmo... acredito que o correto é padronizar essa questão para ter apenas 1 arredondamento. Vou verificar e já falo.

@danilobreda
Copy link
Contributor

Precisamos unificar os arredondamentos do Zeus :)

@MauricioSuporte
Copy link
Collaborator

Olá, pessoal!

Agradecemos a abertura da issue e a discussão em torno do problema de arredondamento nas classes DFe e NFe. Observamos que existe uma diferença significativa no comportamento da função de arredondamento nas duas bibliotecas, que pode causar inconsistências nos cálculos.

Atualmente, a implementação da função de arredondamento na classe DFe.Classes utiliza o padrão padrão de arredondamento, enquanto a classe NFe.Classes aplica o MidpointRounding.AwayFromZero. Isso realmente pode levar a resultados divergentes, como você notou na operação de 0.35 * 15.90, que retorna resultados diferentes nas duas classes.

Para garantir que nossos cálculos sejam consistentes e atendam aos padrões requeridos, vamos padronizar o método de arredondamento em ambas as bibliotecas. Foi criando uma tarefa no backlog da Zeus para implementar essa melhoria e assegurar que o comportamento do arredondamento siga o padrão ABNT, utilizando o MidpointRounding.ToEven, conforme discutido. Assim, todos os cálculos realizados nas notas fiscais estarão alinhados e reduzirão as chances de rejeição por discrepâncias de arredondamento.

Estamos trabalhando para implementar essa melhoria e garantir que o comportamento do arredondamento seja consistente em toda a biblioteca.

Obrigado pelo feedback e por ajudar a melhorar a biblioteca!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

4 participants