ZeusAutomacao / DFe.NET

Biblioteca para Geração de NFe(2.0, 3.10 e 4.0) e NFCe(3.10 e 4.0) e consumo dos serviços necessários à sua manutenção, conforme descritos em http://www.nfe.fazenda.gov.br/portal/principal.aspx
GNU Lesser General Public License v2.1
752 stars 472 forks source link

Arredondamento DFe.Classes e NFe.Classes #1354

Open ricardopdv opened 2 years ago

ricardopdv commented 2 years ago

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 commented 2 years ago

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 commented 2 years ago

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 commented 2 years ago

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 commented 2 years ago

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 commented 1 year ago

Precisamos unificar os arredondamentos do Zeus :)

MauricioSuporte commented 1 week ago

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!