Math.Round在一台客户PC上的奇怪行为

时间:2012-07-18 09:01:23

标签: c# .net vb.net

我有一个非常奇怪的问题,这个问题只发生在我的众多客户中。我已将其跟踪到Math.Round方法。

在这个全新的win7 pc Math.Round(1.59999,2) 返回 1.59 ! 它应该是 1.6 ,并且在所有其他情况下都是如此。

我理解Math.Round关于银行家四舍五入的怪癖,我也知道重载中的各种中点因子选项,但无论如何1.59999当然应该总是1.6 }。

我们已经尝试在PC上修复.NET Framework(3.5 sp1)并进行完整的病毒扫描。可能是导致此行为的原因以及如何进一步调查此问题。

2 个答案:

答案 0 :(得分:1)

我要看的第一件事就是数字1.59999的来源。

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

答案 1 :(得分:1)

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

我还怀疑在舍入时没有引入主要区别:你总是会得到一个非常接近但与1.6不同的值。 1.6无法与double完全相称。您可能只在不同的PC上获得稍微不同的值,特别是如果同一进程中的某些其他dll改变了浮点标记。

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