了解银行家取整.NET



据我所知,中的默认舍入模式。NET是";Bankers Rounding";,遵循以下规则:

  • 如果要取整的数字小于5,则向下取整
  • 如果要舍入的数字等于5,则舍入到最接近的偶数
  • 如果要取整的数字大于5,则向上取整

我们可以用下面的例子来证明这一点:

double[] values = {1.14, 1.15, 1.16, 1.24, 1.25, 1.26};
foreach (double value in values)
{
Console.WriteLine(Math.Round(value, 1));
}
// 1.1 (1.14: round down)
// 1.2 (1.15: round to even)
// 1.2 (1.16: round up)
// 1.2 (1.24: round down)
// 1.2 (1.25: round to even)
// 1.3 (1.26: round up)

然后我尝试了这个:

double value = 1.23456;
Console.WriteLine(Math.Round(value, 3));
// 1.235

我的预期是,这将通过以下逻辑产生1.234

  • 1.234偶数
  • 要取整的数字是5,因此它应该向偶数取整

那么,为什么会产生1.235

我认为你的误解是你说的">如果要舍入的数字是…";当它真的是所有的数字,之后的所有数量都被四舍五入时。

1.23456中,您对大于0.0005.00056进行四舍五入,因此它向上取整。

银行家的四舍五入只适用于刚好到一半的时候,以打破平局。将1.233501.23450循环到三个位置,它们都将转到1.234

最新更新