看下面一段Java代碼:
double sum = 0;
double d = 1064.8;
sum += d;
System.out.println(sum);
sum += d;
System.out.println(sum);
sum += d;
System.out.println(sum);
sum += d;
System.out.println(sum);
sum += d;
System.out.println(sum);
sum += d;
System.out.println(sum);
其輸出結果為:
1064.8
2129.6
3194.3999999999996
4259.2
5324.0
6388.8
把sum和d改為float,則輸出結果如下:
1064.8
2129.6
3194.4001
4259.2
5324.0
6388.8
在C#中,輸出結果仍然如此,由于c#的toString方法會将3194.3999999999996輸出為3194.4(原因我暫時未知),是以這裡我用debug的方式顯示結果:

其他的語言這裡不驗證了,由java和c#得到的結果一緻可以判斷,這個誤差不取決于語言。這裡的原因其實也不複雜,無非就是因為浮點型資料在計算機中用二進制來表示,是以會産生這個誤差。
針對這個問題,在java裡面如果要進行連續的浮點型資料相加,請使用BigDecimal,在c#中也有decimal與之對應。這裡面的細節,我後續還會補充。