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

 



Responder a