除以两个数字,只返回余数。
语法
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
因此可能是正数或负数。 结果始终位于范围(-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
为浮点值,则返回除法的浮点余数。 结果的数据类型是最小的数据类型,可以保存除以数据类型和number2
数据类型number1
产生的所有可能值。
如果 number1
或 number2
计算结果为 Nothing,则将其视为零。
相关运算符包括:
\ 运算符 (Visual Basic) 返回除法的整数商。 例如,表达式
14 \ 4
的计算结果为 3。/运算符 (Visual Basic) 以浮点数的形式返回完整商,包括余数。 例如,表达式
14 / 4
的计算结果为 3.5。
尝试除以零
如果 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.