Math.Round()似乎不一致

时间:2011-11-01 15:07:42

标签: c# .net math rounding

  

可能重复:
  .Net Round Bug
  In C#: Math.Round(2.5) result is 2 (instead of 3)! Are you kidding me?

代码:

var d1 = Math.Round(187.5); // 188
var d2 = Math.Round(62.5); // 62

为什么会这样?

2 个答案:

答案 0 :(得分:17)

默认情况下,Math.Round使用称为Banker's Rounding的舍入形式,当输入位于两个整数之间时,它会舍入到最近的偶数整数。

请参阅Why does .NET use banker's rounding as default?以了解此设计决策。

如果您不喜欢此行为,则可以始终使用Math.Round MidPointRoundingMode,{{1}},您可以指定{{1}}(ToEven,AwayFromZero)。

答案 1 :(得分:2)

您可以通过调用此方法的重载来更改此行为 - http://msdn.microsoft.com/en-us/library/ms131274.aspx