MidpointRounding.ToEven 与 MidpointRounding.AwayFromZero 有什么区别

60 阅读1分钟

MidpointRounding.ToEven(银行家舍入法,也叫四舍六入五成双)和 MidpointRounding.AwayFromZero(向远离零的方向舍入)在处理舍入的方式上有所不同。

以下是示例说明:

MidpointRounding.ToEven(银行家舍入法)

  1. 当舍去位小于 5 时,直接舍去。
  2. 当舍去位大于等于 6 时,进位。
  3. 当舍去位为 5 时,若 5 后面还有非 0 数字则进位;若 5 后面没有非 0 数字且 5 前面一位为奇数则进位,若 5 前面一位为偶数则舍去。
decimal num1 = 2.15m; decimal rounded1 = decimal.Round(num1, 1, MidpointRounding.ToEven); // 结果为 2.2m decimal num2 = 2.25m; 
decimal rounded2 = decimal.Round(num2, 1, MidpointRounding.ToEven); // 结果为 2.2m

MidpointRounding.AwayFromZero(向远离零的方向舍入)

无论舍去位是多少,只要不是 0,都向远离零的方向舍入。

decimal num3 = 2.15m; decimal rounded3 = decimal.Round(num3, 1, MidpointRounding.AwayFromZero); // 结果为 2.2m 
decimal num4 = -2.15m; decimal rounded4 = decimal.Round(num4, 1, MidpointRounding.AwayFromZero); // 结果为 -2.2m

在这个例子中,对于正数和负数,只要舍去位不为 0,都向远离零的方向舍入。而银行家舍入法则更加复杂,考虑了舍去位为 5 时的特殊情况以及数字的奇偶性。