MidpointRounding 列挙型

定義

数値を丸めるために数学的丸めメソッドが使用する戦略を指定します。

public enum class MidpointRounding
public enum MidpointRounding
[System.Runtime.InteropServices.ComVisible(true)]
public enum MidpointRounding
type MidpointRounding = 
[<System.Runtime.InteropServices.ComVisible(true)>]
type MidpointRounding = 
Public Enum MidpointRounding
継承
MidpointRounding
属性

フィールド

名前 説明
ToEven 0

最も近い数値に丸める戦略。 数値が他の 2 つの数値の中間にある場合は、最も近い偶数に丸められます。 中間以外の値はこの選択の影響を受けず、最も近い表現可能な値に丸められます。 銀行家の丸めとも呼ばれます。

AwayFromZero 1

最も近い数値に丸める戦略。 数値が他の 2 つの数値の中間にある場合、0 から離れた最も近い数値に丸められます。 中間以外の値はこの選択の影響を受けず、最も近い表現可能な値に丸められます。

ToZero 2

中間点だけでなく、すべての値がゼロに丸められる、ゼロに向けられた丸めの戦略。 結果は、無限に正確な結果に最も近い値であり、大きさが大きくなっています。 0 桁に丸める場合、これは切り捨てと同じです。0 以外の桁数に丸めると、指定した有効桁数で 0 に切り捨てられます。

ToNegativeInfinity 3

下向き丸めの戦略。中間点だけでなく、すべての値が負の無限大に丸められます。 結果は、無限に正確な結果に最も近い値であり、無限に正確な結果を超える値です。 0 桁に丸める場合、これは数学フロア関数と同等です。0 以外の桁数に丸めると、指定した有効桁数で同じ動作が適用されます。

ToPositiveInfinity 4

上向き丸めの戦略。中間点だけでなく、すべての値が正の無限大に丸められます。 結果は、無限に正確な結果に最も近い値になります。 0 桁に丸める場合、これは数学的な上限関数と同じです。0 以外の桁数に丸めると、指定した有効桁数で同じ動作が適用されます。

次の例では、Math.Round列挙型と組み合わせてMidpointRoundingメソッドを示します。

decimal result;

// Round a positive value using different strategies.
// The precision of the result is 1 decimal place.

result = Math.Round(3.45m, 1, MidpointRounding.ToEven);
Console.WriteLine($"{result} = Math.Round({3.45m}, 1, MidpointRounding.ToEven)");
result = Math.Round(3.45m, 1, MidpointRounding.AwayFromZero);
Console.WriteLine($"{result} = Math.Round({3.45m}, 1, MidpointRounding.AwayFromZero)");
result = Math.Round(3.47m, 1, MidpointRounding.ToZero);
Console.WriteLine($"{result} = Math.Round({3.47m}, 1, MidpointRounding.ToZero)\n");

// Round a negative value using different strategies.
// The precision of the result is 1 decimal place.

result = Math.Round(-3.45m, 1, MidpointRounding.ToEven);
Console.WriteLine($"{result} = Math.Round({-3.45m}, 1, MidpointRounding.ToEven)");
result = Math.Round(-3.45m, 1, MidpointRounding.AwayFromZero);
Console.WriteLine($"{result} = Math.Round({-3.45m}, 1, MidpointRounding.AwayFromZero)");
result = Math.Round(-3.47m, 1, MidpointRounding.ToZero);
Console.WriteLine($"{result} = Math.Round({-3.47m}, 1, MidpointRounding.ToZero)\n");

/*
This code example produces the following results:

3.4 = Math.Round(3.45, 1, MidpointRounding.ToEven)
3.5 = Math.Round(3.45, 1, MidpointRounding.AwayFromZero)
3.4 = Math.Round(3.47, 1, MidpointRounding.ToZero)

-3.4 = Math.Round(-3.45, 1, MidpointRounding.ToEven)
-3.5 = Math.Round(-3.45, 1, MidpointRounding.AwayFromZero)
-3.4 = Math.Round(-3.47, 1, MidpointRounding.ToZero)
*/
Dim result As Decimal = 0D
Dim posValue As Decimal = 3.45D
Dim negValue As Decimal = -3.45D

' Round a positive value using different strategies.
' The precision of the result is 1 decimal place.
result = Math.Round(posValue, 1, MidpointRounding.ToEven)
Console.WriteLine("{0,4} = Math.Round({1,5}, 1, MidpointRounding.ToEven)",
                   result, posValue)
result = Math.Round(posValue, 1, MidpointRounding.AwayFromZero)
Console.WriteLine("{0,4} = Math.Round({1,5}, 1, MidpointRounding.AwayFromZero)",
                   result, posValue)
result = Math.Round(posValue, 1, MidpointRounding.ToZero)
Console.WriteLine("{0,4} = Math.Round({1,5}, 1, MidpointRounding.ToZero)",
                   result, posValue)
Console.WriteLine()

' Round a negative value using different strategies.
' The precision of the result is 1 decimal place.
result = Math.Round(negValue, 1, MidpointRounding.ToEven)
Console.WriteLine("{0,4} = Math.Round({1,5}, 1, MidpointRounding.ToEven)",
                    result, negValue)
result = Math.Round(negValue, 1, MidpointRounding.AwayFromZero)
Console.WriteLine("{0,4} = Math.Round({1,5}, 1, MidpointRounding.AwayFromZero)",
                   result, negValue)
result = Math.Round(negValue, 1, MidpointRounding.ToZero)
Console.WriteLine("{0,4} = Math.Round({1,5}, 1, MidpointRounding.ToZero)",
                   result, negValue)
Console.WriteLine()

'This code example produces the following results:
'
'        3.4 = Math.Round(3.45, 1, MidpointRounding.ToEven)
'        3.5 = Math.Round(3.45, 1, MidpointRounding.AwayFromZero)
'        3.4 = Math.Round(3.45, 1, MidpointRounding.ToZero)
'
'        -3.4 = Math.Round(-3.45, 1, MidpointRounding.ToEven)
'        -3.5 = Math.Round(-3.45, 1, MidpointRounding.AwayFromZero)
'        -3.4 = Math.Round(-3.45, 1, MidpointRounding.ToZero)
'

注釈

丸め処理をより詳細に制御するには、MidpointRoundingMath.Round、およびMathF.Roundの適切なオーバーロードを含むDecimal.Round列挙体を使用します。

列挙型の名前にもかかわらず、すべてのモードが中間点の処理方法についてのみであるとは限りません。 MidpointRounding は、2 つの全体的な丸め方法 (最も近い 丸めと 指示された丸め) を定義します。各列挙フィールドは、次のいずれかの戦略に参加します。

  • 最も近い丸めモード (AwayFromZeroToEven) は、常に最も近い表現可能な値に丸めます。 これらは、入力が 2 つの値 ( 中間点) のちょうど中間にある場合にのみ異なります。これは、列挙型の名前が参照する値です。
  • 有向丸めモード (ToNegativeInfinityToPositiveInfinityToZero) は、常にすべての値 (中間点だけでなく) を固定方向に丸めます。 結果は、入力が中間点でない場合でも、その方向で最も近い表現可能な値になります。

最も近い値に丸めます

Fields:

四捨五入操作は、暗黙または指定された有効桁数を持つ元の数値を受け取ります。次に、次の桁を調べます (これは、有効桁数に 1 を加えた位置の桁です)。最後に、元の数値と同じ有効桁数で最も近い数値を返します。 正の数値の場合、次の桁が 0 から 4 の場合、最も近い数値は負の無限大になります。 次の桁が 6 から 9 の場合、最も近い数値は正の無限大になります。 負の数の場合、次の桁が 0 から 4 の場合、最も近い数値は正の無限大になります。 次の桁が 6 から 9 の場合、最も近い数値は負の無限大になります。

次の桁が 0 から 4 または 6 から 9 の場合、 AwayFromZeroToEven の選択は丸め操作の結果には影響しません。 ただし、次の桁が 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

有向丸め

Fields:

ディレクション付き丸め操作は、暗黙的または指定された精度を持つ元の数値を受け取り、同じ精度で指定された方向に最も近い次の数値を返します。 MidpointRoundingの方向モードは、すべての値を丸める方向を制御します。 最も近い丸めモードとは異なり、これらのモードは中間点だけでなく、すべての入力値に適用されます。たとえば、 ToPositiveInfinity は 2.1、2.5、2.8 をすべて最大 3 に丸めます。

次の表は、有向丸めモードと組み合わせて負の数値と正の数値を丸めた結果を示しています。 数値の丸めに使用される有効桁数は 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

適用対象