Mod 演算子 (Visual Basic)
2 つの数値を除算して剰余のみを返します。
構文
result = number1 Mod number2
指定項目
result
必須です。 任意の数値変数またはプロパティ。
number1
必須です。 任意の数式。
number2
必須です。 任意の数式。
サポートされている型
すべての数値型。 これには、符号なしおよび浮動小数点の型と Decimal
が含まれます。
結果
結果は、number1
が number2
で除算された後の剰余になります。 たとえば、式 14 Mod 4
は 2 に評価されます。
注意
数学的には "剰余 (remainder) " と "法 (modulus) " には違いがあり、負数の場合の結果が異なります。 Visual Basic の Mod
演算子、.NET Framework の op_Modulus
演算子、基礎になる rem IL 命令ではすべて、剰余演算が実行されます。
Mod
演算の結果には被除数の符号 (number1
) が保持されるため、結果は正または負になります。 結果は常に (-number2
, number2
) の範囲 (境界値は除外) になります。 次に例を示します。
Public Module Example
Public Sub Main()
Console.WriteLine($" 8 Mod 3 = {8 Mod 3}")
Console.WriteLine($"-8 Mod 3 = {-8 Mod 3}")
Console.WriteLine($" 8 Mod -3 = {8 Mod -3}")
Console.WriteLine($"-8 Mod -3 = {-8 Mod -3}")
End Sub
End Module
' The example displays the following output:
' 8 Mod 3 = 2
' -8 Mod 3 = -2
' 8 Mod -3 = 2
' -8 Mod -3 = -2
Remarks
number1
または number2
のいずれかが浮動小数点値の場合、除算の浮動小数点の剰余が返されます。 結果のデータ型は、number1
と number2
のデータ型による除算によって得られる可能性のあるすべての値を保持できる最小のデータ型です。
number1
または number2
が Nothing に評価された場合は、0 として扱われます。
関連する演算子には、次のものがあります。
\ 演算子 (Visual Basic) では、除算の整数の商が返されます。 たとえば、式
14 \ 4
は 3 に評価されます。/ 演算子 (Visual Basic) では、剰余を含めた完全な商が浮動小数点数として返されます。 たとえば、式
14 / 4
は 3.5 に評価されます。
0 除算を試行した場合
number2
がゼロに評価された場合、Mod
演算子の動作は、オペランドのデータ型によって異なります。
- 整数除算では、コンパイル時に
number2
を特定できない場合は DivideByZeroException 例外がスローされ、コンパイル時にnumber2
がゼロに評価された場合、コンパイル時エラーBC30542 Division by zero occurred while evaluating this expression
が生成されます。 - 浮動小数点の除算では Double.NaN が返されます。
同等の式
式 a Mod b
は、次のいずれかの式と同等です。
a - (b * (a \ b))
a - (b * Fix(a / b))
浮動小数点の誤差
浮動小数点数を操作する場合、メモリ内で常に正確な 10 進数表現が使用されるとは限らないことに注意してください。 これにより、値の比較や Mod
演算子など、特定の演算によって、予期しない結果につながる可能性があります。 詳細については、「データ型のトラブルシューティング」を参照してください。
オーバーロード
Mod
演算子は "オーバーロード" できます。つまり、クラスまたは構造体がその動作を再定義できます。 コードによって、そのようなオーバーロードを含むクラスまたは構造体のインスタンスに Mod
を適用する場合は、その再定義された動作を確実に理解しておいてください。 詳細については、「 Operator Procedures」を参照してください。
例 1
次の例では、Mod
演算子を使用して 2 つの数値を除算し、剰余だけを返します。 どちらかの数値が浮動小数点数の場合、結果は剰余を表す浮動小数点数になります。
Debug.WriteLine(10 Mod 5)
' Output: 0
Debug.WriteLine(10 Mod 3)
' Output: 1
Debug.WriteLine(-10 Mod 3)
' Output: -1
Debug.WriteLine(12 Mod 4.3)
' Output: 3.4
Debug.WriteLine(12.6 Mod 5)
' Output: 2.6
Debug.WriteLine(47.9 Mod 9.35)
' Output: 1.15
例 2
次の例は、浮動小数点オペランドにおける誤差の可能性を示しています。 最初のステートメントでは、オペランドは Double
であり、0.2 は、格納された値 0.20000000000000001 での無限に繰り返される 2 進小数です。 2 番目のステートメントでは、リテラル型の文字 D
によって両方のオペランドが強制的に Decimal
になり、0.2 には正確な表現が含まれます。
firstResult = 2.0 Mod 0.2
' Double operation returns 0.2, not 0.
secondResult = 2D Mod 0.2D
' Decimal operation returns 0.
関連項目
.NET