据我所知,中的默认舍入模式。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.23350
或1.23450
循环到三个位置,它们都将转到1.234
。