Pergunta com adição de ponto flutuante
-
19-09-2019 - |
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?
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).