Mod 运算符 (Visual Basic)

除以两个数字,只返回余数。

语法

result = number1 Mod number2

部件

result
必填。 任何数值变量或属性。

number1
必填。 任何数值表达式。

number2
必填。 任何数值表达式。

支持的类型

所有数值类型。 这包括无符号和浮点类型以及 Decimal

结果

结果是后余 number1 数除以 number2。 例如,表达式 14 Mod 4 的计算结果为 2。

注释

数学中的 余数模数 之间存在差异,负数的结果不同。 Mod Visual Basic 中的运算符、.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 为浮点值,则返回除法的浮点余数。 结果的数据类型是最小的数据类型,可以保存除以数据类型和number2数据类型number1产生的所有可能值。

如果 number1number2 计算结果为 Nothing,则将其视为零。

相关运算符包括:

尝试除以零

如果 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))

浮点不精确

使用浮点数时,请记住,它们并不总是在内存中具有精确的十进制表示形式。 这可能会导致某些作(如值比较和 Mod 运算符)出现意外结果。 有关详细信息,请参阅 “数据类型疑难解答”。

重载

Mod可以重载运算符,这意味着类或结构可以重新定义其行为。 如果代码适用于 Mod 包含此类重载的类或结构的实例,请确保了解其重新定义的行为。 有关详细信息,请参阅 运算符过程

示例 1

以下示例使用 Mod 运算符除以两个数字,并仅返回余数。 如果任一数字是浮点数,则结果为表示余数的浮点数。

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.2000000000000001。 在第二个语句中,文本类型字符 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.

另请参阅