我有一個執行大量使用小數計算的系統,偶爾會加起來相同的號碼,但返回不同的結果,+/- 0.000000000000000000000000001另外的十進制順序會影響結果
下面是一個簡單的例子:
decimal a = 2.016879990455473621256359079m;
decimal b = 0.8401819425625631128956517177m;
decimal c = 0.4507062854741283043456903406m;
decimal d = 6.7922317815078349615022988627m;
decimal result1 = a + b + c + d;
decimal result2 = a + d + c + b;
Console.WriteLine((result1 == result2) ? "Same" : "DIFFERENT");
Console.WriteLine(result1);
Console.WriteLine(result2);
輸出:
DIFFERENT
10.100000000000000000000000000
10.100000000000000000000000001
的差異是如此之小,沒有什麼實際作用,但有沒有人看到過類似本b安伏?我期望在合計相同的數字時,您總能得到相同的結果。
這是StackOverflow中最常見的單一問題。 – 2011-06-02 23:11:11
谷歌浮點不精確的表示,閱讀它的維基百科或搜索:) – sehe 2011-06-02 23:12:47
值得一提的是'十進制'數據類型應該是免疫的四捨五入錯誤。 http://msdn.microsoft.com/en-us/library/system.decimal(v=vs.71).aspx – 2011-06-02 23:22:02