Estou em um dilema e gostaria de saber da opinião de todos vocês. O que devo usar em operações financeiras e fiscais: arredondamento ou truncamento?
Explicando melhor Antigamente eu usava sempre truncamento em meus sistemas, ou seja, todas as vezes que o resultado de um cálculo apresentava mais que duas casas decimais, então eu truncava para duas casas (desprezava as casas a partir da terceira). Exemplos: 1,55 * 3,63 = 5,6265 truncado para 5,62 1,33 * 2,57 = 3,4181 truncado para 3,41 1,33 * 1,22 = 1,6226 truncado para 1,62 Com o tempo percebi que o arredondamento parecia ser mais usado, inclusive sendo o padrão em calculadoras e banco de dados (Firebird, por exemplo). Notei inclusive que o arredondamento do Firebird e das calculadoras é ligeiramente diferente do arredondamento feito pelo Delphi (isto quando a última casa tem o número 5). Então passei a usar o arredondamento idêntico ao feito pelas calculadoras financeiras. No Firebird eu faço atualmente assim: CAST(Valor AS NUMERIC(9,2)) E para arredondar no Delphi escrevi a função abaixo: function TBRound(Value: Extended; Decimals: integer): Extended; var Factor, Fraction: Extended; begin Factor := IntPower(10, Decimals); { A conversão para string e depois para float evita erros de arredondamentos indesejáveis. } Value := StrToFloat(FloatToStr(Value * Factor)); Result := Int(Value); Fraction := Frac(Value); if Fraction >= 0.5 then Result := Result + 1 else if Fraction <= -0.5 then Result := Result - 1; Result := Result / Factor; end; O problema é que há menos de um mês fui instalar meu sistema em um cliente que adquiriu uma impressora fiscal Bematech MP 25 FI. Constatei que nesta impressora não existe mais a opção de arredondamento, ou seja, todos os valores com mais de duas casas decimais são truncados para apenas duas. Eu achei isto absurdo, visto que o arredondamento parece ser mais coerente, inclusive tenho a impressão de que este comportamento é o padrão em operações financeiras. Infelizmente não tenho como mudar isto, pois é uma regra definida pelo FISCO (segundo informação da Bematech). Agora estou num dilema: 1. Devo mudar meu sistema completamente para truncamento? 2. Ou mudar apenas o módulo que emite cupom fiscal? Se eu mudar todo o sistema corro o risco de ter problemas com lançamento de notas fiscais de entrada. Já imaginou se o fornecedor usar arredondamento e meu sistema usar truncamento? Provavelmente os totais não vai bater. O que devo fazer? Qualquer ajuda será bem-vinda. Atenciosamente. Daniel P. Guimarães Tecnobyte informática -- <<<<< FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM >>>>> Para ver as mensagens antigas, acesse: http://br.groups.yahoo.com/group/delphi-br/messages Para falar com o moderador, envie um e-mail para: [EMAIL PROTECTED] ou [EMAIL PROTECTED] Links do Yahoo! Grupos <*> Para visitar o site do seu grupo na web, acesse: http://br.groups.yahoo.com/group/delphi-br/ <*> Para sair deste grupo, envie um e-mail para: [EMAIL PROTECTED] <*> O uso que você faz do Yahoo! Grupos está sujeito aos: http://br.yahoo.com/info/utos.html