Jump to content

dev botao

Spedpiscofins - Arredondamento


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

Recommended Posts

Eu acho q estava postando esse tópico no forum DESATIVADO, então estou postando aqui.

Uso Delphi2007

Alguém já teve problema com arredondamento nos valores gerados pelo AcbrSPEDPisCofins

Estou atrasadíssimo na entrega do SPEDPISCOFINS do meu sistema.

Sempre tive problema qdo usava Currency e só hj percebi que este componente usa Currency, como por exemplo:

unit ACBrEPCBloco_A;

TRegistroA170 = class

private

fVL_BC_PIS : Currency;

fALIQ_PIS : Currency;

fVL_PIS : Currency;

Por exemplo, meu sistema envia

alíquota 1,65 e o componente gera 1,6501

vlrpis 69,97 e o componente gera 69,98

Estou colocando as minhas mudanças no mantis do ACBr, mas ninguém está dando bola pra isso.

http://www.djsystem.com.br/acbr/mantis/view.php?id=1156

O que estou fazendo de errado?

Ou os moderadores, ainda estão de férias?

Pq ninguém nem fala nada, nem que fiz certo nem errado.

ACBrSPEDPisCofins - Alterados.rar

Link to comment
Share on other sites

  • Consultores

Acho que entendi o que aconteceu. Se você colocou no fórum antigo, então a maior parte dos moderadores não tem feito acesso lá em especial nessa parte dos componentes. Já sobre o Mantis, você colocou a sua sugestão como Projeto ACBrSPEDFiscal, daí eu não consegui visualizar pois minha configuração padrão estava como vizualizar projeto ACBr. Pra dizer a verdade, não me lembro de ter configurado assim, mas... :roll:

Vou verificar suas sugestões.

[]'s

Consultor SAC ACBr

Elton
Profissionalize o ACBr na sua empresa, conheça o ACBr Pro.

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

Um engenheiro de Controle de Qualidade(QA) entra num bar. Pede uma cerveja. Pede zero cervejas.
Pede 99999999 cervejas. Pede -1 cervejas. Pede um jacaré. Pede asdfdhklçkh.
Link to comment
Share on other sites

  • Consultores

Olá jperim,

rapaz, não consegui reproduzir seu problema. Você consegue fazer o problema acontecer no DEMO do SPEDPisCofins?

Com respeito a problemas com arredondamentos, isso depende do que está usando e para qual objetivo. Currency por exemplo é apenas para dinheiro e trabalha com, no máximo, 4 casas decimais. Double tem uma possibilidade de mais casas, mas uma precisão menor. Isto é, as vezes, você está passando o valor 69,97 para um tipo Double. Mas na verdade, internamente ele é armazenado como 69.6700000000000017053025658242404460906982421875.

Eu já tive muitos problemas de arredondamento usando Double, de forma que hoje meu padrão para variáveis de ponto flutuante que não são dinheiro é Extended.

Pra quem quiser estudar mais a fundo, link para o artigo What Every Computer Scientist Should Know About Floating-Point Arithmetic (O que todo cientista da computação deveria saber sobre aritmética de ponto flutuante). E pergunta a "Como comparar double no Delphi?" no StackOverflow (também em inglês) http://stackoverflow.com/questions/6106119/how-to-compare-double-in-delphi

[]'s

Consultor SAC ACBr

Elton
Profissionalize o ACBr na sua empresa, conheça o ACBr Pro.

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

Um engenheiro de Controle de Qualidade(QA) entra num bar. Pede uma cerveja. Pede zero cervejas.
Pede 99999999 cervejas. Pede -1 cervejas. Pede um jacaré. Pede asdfdhklçkh.
Link to comment
Share on other sites

Ola EMBarbosa,

Descartando minhas alterações, com vc não acontece isso usando currency ?

alíquota 1,65 e o componente gera o TXT com 1,6501

No meu sistema uso assim:

ALIQ_PIS := SimpleRoundTo(RS_ItemNotaImp.GetDoubleByName('ALIQPPIS'));

Math -> SimpleRoundTo() para arredondar para 2 casas decimais.

Mesmo assim gera o TXT com 1,6501.

Link to comment
Share on other sites

  • Consultores

Não. Eu tentei até fazer no demo acontecer isso, mas não consegui. Sempre me retorna 1,6500.

EDIT: o seu problema se encontra no simpleround e não no componente.

[]'s

Consultor SAC ACBr

Elton
Profissionalize o ACBr na sua empresa, conheça o ACBr Pro.

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

Um engenheiro de Controle de Qualidade(QA) entra num bar. Pede uma cerveja. Pede zero cervejas.
Pede 99999999 cervejas. Pede -1 cervejas. Pede um jacaré. Pede asdfdhklçkh.
Link to comment
Share on other sites

  • Consultores

Eu usei o demo e vi q com ele não acontece mesmo, mas lá é colocado manualmente 1.65 e no meu sistema vem de um TField.AsFloat que passa pelo SimpleRoundTo() q retorna Double.

Eu fiz o teste no DEMO, com uma variável mas não teve problema. Só não usei o SimpleRoundTo.

Se você estiver usando o Delphi 7.1 ou anterior, saiba que o SimpleRoundTo tem problemas (veja esse QC). Na verdade, as funções de arredondamento sempre tiveram problemas no Delphi.

Sugiro que tente sem o SimpleRoundTo e que se for preciso mais de 4 casas decimais use Extended nas variáveis para cálculo.

[]'s

Consultor SAC ACBr

Elton
Profissionalize o ACBr na sua empresa, conheça o ACBr Pro.

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

Um engenheiro de Controle de Qualidade(QA) entra num bar. Pede uma cerveja. Pede zero cervejas.
Pede 99999999 cervejas. Pede -1 cervejas. Pede um jacaré. Pede asdfdhklçkh.
Link to comment
Share on other sites

RESOLVIDO !!!

Fiz uma função para tratar meus valores antes de inserir no obj ACBrSPED e deu certo agora.

function DoubleCurrency(Value: Double; Decimal: Integer = 2): Currency;

begin

Result := StrToCurrDef(FormatFloat('#0.' + StringOfChar('0', Decimal), SimpleRoundTo(Value, Decimal*-1)), 0);

end;

Obrigado pela atenção.

Link to comment
Share on other sites

  • Consultores

Não sei a versão do seu Delphi, mas existe a função FloatToCurr() será que ela não resolveria?

[]'s

Consultor SAC ACBr

Elton
Profissionalize o ACBr na sua empresa, conheça o ACBr Pro.

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

Um engenheiro de Controle de Qualidade(QA) entra num bar. Pede uma cerveja. Pede zero cervejas.
Pede 99999999 cervejas. Pede -1 cervejas. Pede um jacaré. Pede asdfdhklçkh.
Link to comment
Share on other sites

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

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.