double型態乘法問題
前一陣子同事在抓一個程式的Bug的時候發生了一件百思不得其解的問題,double型態在進行兩個變數比較的時候出現了【24.9 != 24.9】的詭異現象。下面法法中可以發現當變數A=24.9; B=8.3*3;這樣出來比較出來竟然出現了false的情況,在將兩變數轉換成字串型態後比較竟然又相等了。有此可見,雙精倍數在儲存變數的時候可能內含了極小的小數,小到在轉換成字串型態的時候無法出現所導致。
結論,要進行浮點數運算最好還是使用decimal來進行,避免發生看的結果並不保證是實際的結果。
double A = 24.9; double B = 8.3 * 3; decimal C = 24.9M; decimal D = 8.3M * 3M; Console.WriteLine("double A = 24.9"); Console.WriteLine("double B = 8.3 * 3"); Console.Write("A == B 結果為 ==> "); Console.WriteLine(A == B); Console.Write("A.ToString() == B.ToString() 結果為 ==> "); Console.WriteLine(A.ToString() == B.ToString()); Console.WriteLine(""); Console.WriteLine("decimal C = 24.9M"); Console.WriteLine("decimal D = 8.3M * 3M"); Console.Write("C == D 結果為 ==> "); Console.WriteLine(C == D); Console.Write("C.ToString() == D.ToString() 結果為 ==> "); Console.WriteLine(C.ToString() == D.ToString()); Console.WriteLine("");
結論,要進行浮點數運算最好還是使用decimal來進行,避免發生看的結果並不保證是實際的結果。
留言
張貼留言
您好,我是 Lawrence,這裡是我的開發筆記的網誌,如果你對我的文章有任何疑問或者有錯誤的話,歡迎留言讓我知道。