float totalAmount = 0;
.
.
.//totalAmount assigned value 1.05 correctly
.
totalAmount += float.Parse(dataRow["Amt"].ToString()); //where dataRow["Amt"] has value 4.93
totalAmountに対して得られる答えは、5.98ではなく5.97999554です。
なぜこうなった?
float totalAmount = 0;
.
.
.//totalAmount assigned value 1.05 correctly
.
totalAmount += float.Parse(dataRow["Amt"].ToString()); //where dataRow["Amt"] has value 4.93
totalAmountに対して得られる答えは、5.98ではなく5.97999554です。
なぜこうなった?
totalAmount
累積する前に、1.05であると述べます。これにより、次のような期待される結果が得られます。
1.05
4.93 +
------
5.98
5.97999954が得られます。これは、基本的にIEEE浮動小数点で最もよく表される答えです。これは、すべての10進数を正確に表現できないバイナリ形式です。たとえば、かなり一般的な0.1 10には、無限の2進浮動小数点表現.0001100110011...
2があります。
そして、ウィキペディアのリンク、適切な測定のために:http: //en.wikipedia.org/wiki/Floating_point#Accuracy_problems ;)
jdmichalは正しいですが、これを実際に正しく加算したい場合は、Decimal型(10進リテラルを含む)を使用できます。