本文提供此 API 參考文件的補充備註。
使用 MidpointRounding 列舉搭配 Math.Round、MathF.Round 和 Decimal.Round 的適當多載,以提供四捨五入過程的更多控制權。
整體四捨五入策略有兩個:四捨五入到最接近 且 導向捨入,而每個列舉欄位都只參與其中一個策略。
四捨五入到最接近的數字
領域:
四捨五入到最接近的運算會採用具有隱含或指定有效位數的原始數位;會檢查下一個數位,也就是該有效位數加上一個;和會傳回最接近的數位,其有效位數與原始數位相同。 如果是正數,如果下一個數位是從 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 |