この記事では、この API のリファレンス ドキュメントに補足的な解説を提供します。
丸め処理をより詳細に制御するには、MidpointRounding、Math.Round、およびMathF.Roundの適切なオーバーロードを含むDecimal.Round列挙体を使用します。
全体的な丸め方法は 2 つあり、最も近い値への丸めと有向丸めがあります。各列挙フィールドはこれらの方法のいずれか 1 つに従います。
最も近い値に丸めます
田畑:
四捨五入操作は、暗黙または指定された有効桁数を持つ元の数値を受け取ります。次に、次の桁を調べます (これは、有効桁数に 1 を加えた位置の桁です)。最後に、元の数値と同じ有効桁数で最も近い数値を返します。 正の数値の場合、次の桁が 0 から 4 の場合、最も近い数値は負の無限大になります。 次の桁が 6 から 9 の場合、最も近い数値は正の無限大になります。 負の数の場合、次の桁が 0 から 4 の場合、最も近い数値は正の無限大になります。 次の桁が 6 から 9 の場合、最も近い数値は負の無限大になります。
次の桁が 0 から 4 または 6 から 9 の場合、 MidpointRounding.AwayFromZero と MidpointRounding.ToEven は丸め操作の結果には影響しません。 ただし、次の桁が 5 で、2 つの可能な結果の中間点であり、残りのすべての数字がゼロであるか、または残りの数字がない場合、最も近い数値はあいまいです。 この場合、 MidpointRounding の最も近い四捨五入モードを使用すると、丸め操作でゼロから最も近い数値を返すか、最も近い偶数を返すかを指定できます。
次の表は、一部の負の数値と正の数値を、最も近い丸めモードと組み合わせて丸める結果を示しています。 数値の丸めに使用される有効桁数は 0 です。これは、小数点の後の数値が丸め操作に影響することを意味します。 たとえば、-2.5 の場合、小数点の後の数字は 5 です。 その数字は中間点であるため、 MidpointRounding 値を使用して丸めの結果を決定できます。 AwayFromZeroを指定すると、精度が0でゼロに最も近い数値であるため、-3が返されます。 ToEvenを指定すると、有効桁数が 0 の最も近い偶数であるため、-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 の有向モードは、事前に定義された数値に向かった丸めの実行を制御します。
次の表は、有向丸めモードと組み合わせて負の数値と正の数値を丸めた結果を示しています。 数値の丸めに使用される有効桁数は 0 です。これは、小数点が丸め操作の影響を受ける前の数値を意味します。
| 元の番号 | 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 |
.NET