我有一个执行大量使用小数计算的系统,偶尔会加起来相同的号码,但返回不同的结果,+/- 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