次の方法で共有


Mod 演算子 (Visual Basic)

2 つの数値を除算し、剰余のみを返します。

構文

result = number1 Mod number2

部品

result
必須。 任意の数値変数またはプロパティ。

number1
必須。 任意の数値式。

number2
必須。 任意の数値式。

サポートされている型

すべての数値型。 これには、符号なし型と浮動小数点型と Decimalが含まれます。

結果

結果は、 number1number2で除算された後の剰余です。 たとえば、 14 Mod 4 式は 2 に評価されます。

数学には 剰余剰余 の差があり、負の数の結果は異なります。 Visual Basic の Mod 演算子、.NET Framework op_Modulus 演算子、および基になる rem IL 命令はすべて、剰余演算を実行します。

Mod演算の結果は、被除数、number1の符号を保持するため、正または負の可能性があります。 結果は常に範囲 (-number2number2) に含まれません。 例えば次が挙げられます。

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のいずれかが浮動小数点値の場合は、除算の浮動小数点剰余が返されます。 結果のデータ型は、 number1number2のデータ型との除算に起因するすべての可能な値を保持できる最小のデータ型です。

number1またはnumber2Nothing と評価された場合、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.

こちらも参照ください