System.MidpointRounding 枚举

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

MidpointRounding 枚举与适当的 Math.RoundMathF.RoundDecimal.Round 重载结合使用,以便对舍入过程提供更多控制。

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

四舍五入到最接近的值

领域:

四舍五入操作将采用具有隐式或指定精度的原始数字;检查位于该精度加一位的下一位数字,并返回与原始数字具有相同精度的最接近数字。 对于正数,如果下一位数字在 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