不同机器上的不同结果 - 将十进制转换为双精度

时间:2015-09-08 17:11:05

标签: c# .net casting

static void Main(string[] args)
{
    double a = 222.65;
    double b = 0.056124761669643426;
    double c = (double) ((decimal) a*(decimal) b);
}

为什么这些计算会在不同的操作系统上产生不同的结果? 这部分总是给出相同的结果:

((decimal) a*(decimal) b)

在施法加倍之后我得到:

12.496178185746102

12.496178185746105

我的问题是这个微小的变化对结果有很大影响,测试失败。

现在重要的信息:

  1. Project在同一台机器上使用.NET 4.0构建。
  2. 这两台机器都安装了.NET 4.0和.NET 4.5.2。
  3. 项目作为x86应用程序运行。
  4. 我在安装了Windows 7,Windows Server 2003,Windows Server 2008的计算机上获得的第一个结果。
  5. 我在装有Windows Server 2012,Windows 10的计算机上获得的第二个结果。
  6. 我不确定CLR版本,但我认为它带有.NET,所以应该是相同的。
  7. Windows 8,Windows Server 2012(两者都在一起发布)后似乎发生了变化。我一直认为结果可能只受.NET版本的影响。有什么想法吗?

    编辑:由于我身边的错误信息,有一个例子:

     double a = 222.65;
     double b = 0.056124761669643426;
     double c = (double) ((decimal) a*(decimal) b);
    
      double result = Process(c) <- doing something very complicated
    
    Assert.That(result,expectedResult,tolerance=1E-8) <- here is an impact
    

0 个答案:

没有答案