Convert.ToDouble(十进制)结果不一致

时间:2016-10-24 08:41:17

标签: c#

我升级了一个计算程序,发现结果意外地发生了变化。 我找到了问题,但不知道如何发生这种情况或如何解决它。

结果差异是由此声明引起的

Convert.ToDouble(0.0000000035141287671294348266M)

当我打开两个Visual Studio Community 2015实例以运行新程序和旧程序时,在语句之前设置一个断点并在立即窗口中对其进行评估,我可以得到两个结果。 一个是

3.514128767129435E-09

,另一个是

3.5141287671294345E-09

前者似乎是正确的(4348266四舍五入到435),但是如果我在启动后立即打破前程序并再次进行评估,结果将成为后者。

这不是一个巨大的差异,但这种行为让我害怕。哪一个应该是正确的结果?我该如何避免这个问题?

1 个答案:

答案 0 :(得分:1)

问题在于双重保证的精确度。

根据MSDN,它是15-16位,就您的示例而言,差异仅在第16位可见。