千萬不要覺得 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();