Pergunta

Estou curioso sobre a existência de quaisquer padrões de “arredondamento” no que diz respeito ao cálculo de dados financeiros.Meu pensamento inicial é realizar o arredondamento somente quando os dados estiverem sendo apresentados ao usuário (camada de apresentação).

Se dados "arredondados" forem usados ​​para cálculos adicionais, deve-se usar o valor "arredondado" ou o valor "bruto"?Alguém tem algum conselho?

Observe que estou ciente de diferentes métodos de arredondamento, ou seja,Arredondamento de banqueiros etc.

Foi útil?

Solução

A primeira e mais importante regra:use um tipo de dados decimais, nunca tipos binários de ponto flutuante.

O momento exato em que o arredondamento deve ser realizado pode ser determinado por regulamentos, como a conversão entre o Euro e moedas nacionais ele substituiu.

Se não existissem tais regras, eu faria todos os cálculos com alta precisão e arredondaria apenas para apresentação, ou seja,não use valores arredondados para cálculos adicionais.Isso deve produzir a melhor precisão geral.

Outras dicas

Acabei de perguntar a um programador de mainframe grisalho da empresa de software financeiro em que trabalho, e ele disse que não existe um padrão bem conhecido e que depende da prática do programador.

Embora os estatísticos estejam cientes da questão do arredondamento desde pelo menos 1906, é difícil encontrar uma norma financeira que a endosse.

De acordo com este assentoe, o "relatório da Comissão Europeia A introdução do euro e o arredondamento dos valores monetários sugere que anteriormente não existia uma abordagem padrão para o arredondamento no setor bancário."

Em geral, use um modo de arredondamento simétrico, independentemente da base em que você está trabalhando (base 2 ou base 10).

Isso evitará vieses sistemáticos durante os cálculos.

Esse modo é Round-Half-To-Even, também conhecido como "arredondamento de banqueiros".

Use ferramentas de linguagem que permitem especificar explicitamente o contexto numérico, incluindo os modos de arredondamento e truncamento.Por exemplo, Python decimal módulo.As suposições implícitas feitas pela biblioteca C podem não ser apropriadas para seus cálculos.

http://en.wikipedia.org/wiki/Rounding#Rounding_to_integer

Eu não vi a existência de "o único padrão para governar todos eles" - existem inúmeras regras de arredondamento (como você referiu) e elas parecem entrar em ação com base no setor/cliente/e no código da moeda (http://en.wikipedia.org/wiki/ISO_4217) - como nem todo mundo usa 2 casas depois da vírgula, o problema fica ainda mais complicado.No final das contas, seu cliente precisa especificar as regras que deseja implementar...

É frustrante que não existam padrões claros sobre isso, tanto para orientar o programador quanto como defesa em tribunal.Apenas fazer o arredondamento "regular" para a folha de pagamento mais próxima pode levar ao pagamento insuficiente de alguns centavos no contracheque aqui e ali, o que é algo que os advogados trabalhistas comem como crack.

Embora uma taxa de pagamento base possa ser especificada apenas em duas casas decimais ("Você é contratado por US$ 22,71/hora"), coisas como horas extras combinadas (determinadas pela média de múltiplas taxas de pagamento em um período) acabam com uma taxa horária efetiva de $ 23,37183475/hora.

Como você paga horas extras nisso?

15 hours x 23.37183475 x 1.5 = $525.87 rounded from $525.86628187
15 hours x 23.37       x 1.5 = $525.82

POR QUE VOCÊ ROUBOU CINCO CENTAVOS DO MEU CLIENTE? Infelizmente, não estou brincando sobre isso.

Isso fica ainda mais desconfortável quando você calcula com o valor de precisão total, mas exibe uma versão truncada:você faz o primeiro cálculo acima, mas exibe apenas $ 23,37 para a taxa no contracheque.

Agora o cálculo do contracheque não depende do centavo, e agora você tem que explicar, mas mesmo que seja a favor do funcionário, pode ser o suficiente para um advogado trabalhista sentir cheiro de sangue na água e começar a procurar outro coisa.

Uma abordagem é sempre favorecer o empregado, e não na direção natural, para que nunca possa haver uma acusação de roubo sistemático de salário.

Considere o uso de números inteiros escalonados.

Em outras palavras, armazene números inteiros de centavos em vez de números fracionários de dólares.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top