Ir para conteúdo
  • Cadastre-se

dev botao

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

Recommended Posts

Postado

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

  • Consultores
Postado

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.
Postado

Obrigado pela sua atenção.

Falando a verdade parei de usar Currency nos meus projetos faz um tempão, só me trás problemas de arrendondamento, uso sempre Double pra tudo.

  • Consultores
Postado

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.
Postado

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.

  • Consultores
Postado

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.
Postado

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.

  • Consultores
Postado

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.
Postado

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.

  • Consultores
Postado

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