System.MidpointRounding 枚举
本文提供了此 API 参考文档的补充说明。
使用MidpointRounding具有适当重载的Math.RoundMathF.Round枚举,并提供Decimal.Round对舍入过程的更多控制。
有两个整体舍入策略(舍入到最 接近和 定向舍入),每个枚举字段都参与其中一个策略。
舍入到最接近
字段:
舍入到最接近的操作采用具有隐式或指定精度的原始数字;检查下一位数字,其精度为 1;并返回与原始数字具有相同精度的最接近的数字。 对于正数,如果下一位数字从 0 到 4,则最接近的数字是负无穷大。 如果下一位数字是从 6 到 9,则最接近的数字是正无穷大。 对于负数,如果下一个数字从 0 到 4,则最接近的数字是正无穷大。 如果下一位数字从 6 到 9,则最接近的数字是负无穷大。
如果下一位数字从 0 到 4 或 6 到 9,则MidpointRounding.AwayFromZero
MidpointRounding.ToEven
不会影响舍入操作的结果。 但是,如果下一位数字为 5,这是两个可能的结果之间的中点,并且所有剩余数字均为零或没有剩余数字,则最接近的数字不明确。 在这种情况下,通过舍入到最接近的模式 MidpointRounding
,可以指定舍入操作是返回离零最近的数字还是最接近的偶数。
下表演示了将一些负数和正数舍入与最接近的模式结合使用的结果。 用于对数字进行舍入的精度为零,这意味着小数点后的数字会影响舍入运算。 例如,对于数字 -2.5,小数点后面的数字为 5。 由于该数字是中点,因此可以使用值 MidpointRounding
来确定舍入结果。 如果 AwayFromZero
指定,则返回 -3,因为它是离零最近的数字,精度为零。 如果 ToEven
指定,则返回 -2,因为它是精度为零的最接近偶数。
原始数字 | AwayFromZero | ToEven |
---|---|---|
3.5 | 4 | 4 |
2.8 | 3 | 3 |
2.5 | 3 | 2 |
2.1 | 2 | 2 |
-2.1 | -2 | -2 |
2.5- | -3 | -2 |
-2.8 | -3 | -3 |
3.5- | -4 | -4 |
定向舍入
字段:
定向舍入运算采用具有隐式或指定精度的原始数字,并返回与原始数字相同的特定方向的下一个最接近的数字。 用于控制执行舍入的预定义数字的定向模式 MidpointRounding
。
下表演示了将一些负数和正数与定向舍入模式结合使用的结果。 用于对数字进行舍入的精度为零,这意味着小数点前的数字受舍入运算的影响。
原始数字 | ToNegativeInfinity | ToPositiveInfinity | ToZero |
---|---|---|---|
3.5 | 3 | 4 | 3 |
2.8 | 2 | 3 | 2 |
2.5 | 2 | 3 | 2 |
2.1 | 2 | 3 | 2 |
-2.1 | -3 | -2 | -2 |
2.5- | -3 | -2 | -2 |
-2.8 | -3 | -2 | -2 |
3.5- | -4 | -3 | -3 |