[C#] double相加(減)會有些誤差

千萬不要覺得 double叫做 雙精準度 就沒有誤差的問題!!

我們直接來看範例

double a = 0.2, result = 0;
for (int i = 1; i <= 1000; i++)
{
   result += a;
   Console.WriteLine(result);
}
Console.ReadLine();

 

執行結果: 

 

原因是 double 屬於floating binary point types。

也就是說double型態的數值在相加減時候,會先將數值轉成二進位。

然而,在轉換成二進位的時候,儲存小數部份的位數會有不夠的現象,這就是造成些微差距的主要原因。

 

想要解決此問題需要改用 decimal 資料型態就可以了,雖然可表示的範圍比較小,不過應該夠用。

decimal a = (decimal)0.2, result = 0;
for (int i = 1; i <= 1000; i++)
{
   result += a;
   Console.WriteLine(result);
}
Console.ReadLine();