2

我有一个非常奇怪的问题,我的许多客户中只有一台电脑上发生了这种问题。我已经追踪到Math.Round方法。

在这款全新的 win7 电脑上Math.Round(1.59999,2)回归1.59!应该是1.6,在所有其他情况下也是如此。

我了解银行家四舍五入的怪癖,Math.Round并且我也知道重载中的各种中点舍入选项,但无论如何1.59999都应该始终如此1.6

我们已尝试修复 PC 上的 .NET Framework (3.5 sp1) 并进行全面病毒扫描。这种行为的原因可能是什么,我该如何进一步调查这个问题。

4

2 回答 2

1

您的核心问题是您是double但您期望有意义的十进制数字。如果十进制数字有意义,

我还怀疑舍入时没有引入主要区别:您总是会得到一个非常接近但不等于1.6. 1.6不能完全用 来表示double。有可能您在不同的 PC 上得到的值略有不同,特别是如果同一进程中的其他一些 dll 更改了浮点标志。

我怀疑观察到的差异发生在您转换为字符串的过程中。

于 2012-07-18T10:08:36.680 回答
1

我首先要看的是数字1.59999的来源。

它是在发送到之前被解析为浮点数的字符串的结果Math.Round吗?如果是这样,是不是该字符串被截断了?您能确定传递给的值Math.Round实际上是1.59999而不是1.59吗?

于 2012-07-18T09:25:12.460 回答