2 つの数値を除算し、剰余のみを返します。
構文
result = number1 Mod number2
部品
result
必須。 任意の数値変数またはプロパティ。
number1
必須。 任意の数値式。
number2
必須。 任意の数値式。
サポートされている型
すべての数値型。 これには、符号なし型と浮動小数点型と Decimal
が含まれます。
結果
結果は、 number1
が number2
で除算された後の剰余です。 たとえば、 14 Mod 4
式は 2 に評価されます。
注
数学には 剰余 と 剰余 の差があり、負の数の結果は異なります。 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
注釈
number1
またはnumber2
のいずれかが浮動小数点値の場合は、除算の浮動小数点剰余が返されます。 結果のデータ型は、 number1
と number2
のデータ型との除算に起因するすべての可能な値を保持できる最小のデータ型です。
number1
またはnumber2
が Nothing と評価された場合、0 として扱われます。
関連する演算子は次のとおりです。
\ 演算子 (Visual Basic) は、除算の整数商を返します。 たとえば、式
14 \ 4
は 3 に評価されます。/ 演算子 (Visual Basic) は、剰余を含む完全な商を浮動小数点数として返します。 たとえば、
14 / 4
式は 3.5 に評価されます。
ゼロによる除算が試行されました
number2
が 0 に評価される場合、Mod
演算子の動作はオペランドのデータ型によって異なります。
- 整数除算は、コンパイル時に
number2
を特定できない場合にDivideByZeroException例外をスローし、コンパイル時にnumber2
が 0 に評価された場合にコンパイル時エラー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
を適用する場合は、再定義された動作を理解していることを確認してください。 詳細については、「 演算子プロシージャ」を参照してください。
例 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.200000000000001 の無限に繰り返される二項分数です。 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