Pergunta

float totalAmount = 0;
.
.
.//totalAmount assigned value 1.05 correctly
.
totalAmount  += float.Parse(dataRow["Amt"].ToString()); //where dataRow["Amt"] has value 4.93

A resposta eu recebo por quantiaTotal é 5.97999954, em vez de 5,98

Por que isso está acontecendo?

Foi útil?

Solução

estado Você que totalAmount é 1,05, antes da acumulação. Isso daria resultados esperados:

1.05
4.93 +
------
5.98

Você está recebendo 5.97999954, que é basicamente a resposta como melhor representado pelo IEEE ponto flutuante, que é um formato binário que não pode expressar exatamente cada número decimal. Por exemplo, o bastante comum 0,1 10 tem um binário infinito flutuante .0001100110011... representação ponto 2 .

E um link Wikipedia, para uma boa medida: http://en.wikipedia.org/ wiki / Floating_point # Accuracy_problems ;)

Outras dicas

Isto é devido a que representa base 10 números em um base-2 sistema

matemática de ponto flutuante em computadores sempre faz isso. Se você sabe o nível de precisão que você precisa, você deve usar a representação decimal apropriada.

jdmichal é correto, mas vou acrescentar que, se você realmente quer que isso se somam corretamente, você pode usar o tipo Decimal (incluindo literais decimais).

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