Pergunta

Eu queria ver se as pessoas estavam usando decimal para aplicações financeiras em vez de duplo. Já vi muita gente usando dupla em todo o lugar com consequências inesperadas. .

Você vê outros fazendo este erro. . .

Foi útil?

Solução

Nós fizemos infelizmente e nós se arrepender. Tivemos que mudar todas as duplas para decimais. Decimais são bons para aplicações financeiras. Você pode olhar para este artigo tipo A Dinheiro para a CLR :

Um conveniente, o dinheiro de alto desempenho estrutura para a qual CLR alças operações aritméticas, tipos de moeda, formatação e distribuição de cuidado e arredondamento sem perda.

Outras dicas

Sim, usando float ou double de finanças é um erro comum, levando a muito, muito dor,. decimal é a escolha mais óbvia neste cenário.

Para conhecimento geral, uma boa discussão de cada um é aqui (float / casal) e aqui (decimal).

Isto não é tão óbvio quanto você pode pensar. Recentemente, tive o controlador de uma grande corporação me dizer que ele queria que seus relatórios financeiros para corresponder ao que Excel geraria, que é a manutenção de resultados calculados internamente com a máxima precisão e só arredondamento no último minuto para fins de exibição. Isso significa que você não pode sempre coincidir com as respostas do Excel por cálculos manuais utilizando apenas valores exibidos. Sua explicação foi que havia vários algoritmos para gerar os resultados, cada um fazendo o arredondamento em um lugar diferente usando valores decimais, portanto, potencialmente gerando respostas conflitantes, mas o método Excel sempre gerado a mesma resposta.

Eu, pessoalmente, acho que ele está errado, mas com tantas pessoas financeiros usando o Excel sem entender como usá-lo corretamente para cálculos financeiros, aposto que há um monte de pessoas que concordam com este controlador.

Eu não quero começar uma guerra religiosa, mas eu gostaria de ouvir outras opiniões sobre este assunto.

Se é "científica" de medição (I peso médio, comprimento, área etc) use dupla.

Se for financeira, ou tem alguma coisa a ver com a lei (por exemplo, a área de uma propriedade), em seguida, usar decimal.

A parte difícil é arredondamento.

Se o imposto é de 2,4% que você rodada nos detalhes ou após a soma?

Na maioria das vezes yo tem que fazer as duas coisas (e corrigir o DIFS)

Eu tenho que correr para isso algumas vezes. Muitas línguas têm nada do tipo embutido, e para alguém que não entende o problema parece apenas mais um aborrecimento, especialmente se parece que ele funciona como pretendido sem ele.

Eu sempre usei Decimal. Pelo menos quando eu tinha uma língua que a suporta. Caso contrário, erros de arredondamento vai matá-lo.

Eu concordo totalmente em questões de correção de ponto flutuante vs decimal mencionado acima, mas muitas aplicações financeiras são o desempenho crítico.

Em tais casos, você irá considerar a utilização float / double como decimal tem um grande impacto sobre o desempenho em sistemas onde tipos decimais não são suportados no hardware. E ainda é possível embrulhar tipos de ponto flutuante em aulas de nível superior (por exemplo, imposto, Comissão, Equilíbrio, dividendos, cotação, Tick, etc ...) que representam modelo de domínio e encapsular toda a lógica de arredondamento, bem como operadores válidos sobre esses tipos e suas interações. E sim -. Em alguns projetos que implementaram personalizado arredondamento funções de espremer até 20% mais fora de cálculos em relação ao .NET ou win32 métodos

Outra coisa a considerar é se você passar seus objetos fora do processo, como a serialização de casas decimais que são geralmente 4 inteiros e passá-los sobre o fio é muito mais intensivo da CPU (esp se não for suportado) e resulta em significativamente mais largura de banda e maior memória pegada.

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