System.MidpointRounding 枚举

本文提供了此 API 参考文档的补充说明。

使用MidpointRounding具有适当重载的Math.RoundMathF.Round枚举,并提供Decimal.Round对舍入过程的更多控制。

有两个整体舍入策略(舍入到最 接近和 定向舍入),每个枚举字段都参与其中一个策略。

舍入到最接近

字段:

舍入到最接近的操作采用具有隐式或指定精度的原始数字;检查下一位数字,其精度为 1;并返回与原始数字具有相同精度的最接近的数字。 对于正数,如果下一位数字从 0 到 4,则最接近的数字是负无穷大。 如果下一位数字是从 6 到 9,则最接近的数字是正无穷大。 对于负数,如果下一个数字从 0 到 4,则最接近的数字是正无穷大。 如果下一位数字从 6 到 9,则最接近的数字是负无穷大。

如果下一位数字从 0 到 4 或 6 到 9,则MidpointRounding.AwayFromZeroMidpointRounding.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