Mod 运算符 (Visual Basic)

使两个数字相除,仅返回余数。

语法

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

备注

如果 number1number2 是浮点值,则返回除法的浮点余数。 结果的数据类型是最小的数据类型,它可以保存与数据类型 number1number2 相除得到的所有可能值。

如果 number1number2 的计算结果为 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))

浮点不精确性

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

重载

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

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

另请参阅