我有一个非常奇怪的问题,这个问题只发生在我的众多客户中。我已将其跟踪到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)并进行完整的病毒扫描。可能是导致此行为的原因以及如何进一步调查此问题。
答案 0 :(得分:1)
我要看的第一件事就是数字1.59999
的来源。
是否是在发送到Math.Round
之前将字符串解析为浮点数的结果?如果是这样,该字符串是否被截断?您能否确定传递给Math.Round
的值实际上是1.59999
而不是1.59
?
答案 1 :(得分:1)
您的核心问题是您是double
,但您希望得到有意义的十进制数字。如果十进制数字有意义,
我还怀疑在舍入时没有引入主要区别:你总是会得到一个非常接近但与1.6
不同的值。 1.6
无法与double
完全相称。您可能只在不同的PC上获得稍微不同的值,特别是如果同一进程中的某些其他dll改变了浮点标记。
我怀疑在您转换为字符串时会发生观察到的差异。