请考虑以下代码:
0.1 + 0.2 == 0.3 -> false
Run Code Online (Sandbox Code Playgroud)
0.1 + 0.2 -> 0.30000000000000004
Run Code Online (Sandbox Code Playgroud)
为什么会出现这些不准确之处?
我有一个使用小数执行大量计算的系统,偶尔会添加相同的数字,但返回不同的结果,+/ - 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);
Run Code Online (Sandbox Code Playgroud)
那输出:
DIFFERENT
10.100000000000000000000000000
10.100000000000000000000000001
Run Code Online (Sandbox Code Playgroud)
差异很小,没有实际效果,但有人见过这样的事情吗?我期望在添加相同的数字时,您将始终获得相同的结果.