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
备注
如果 number1
或 number2
是浮点值,则返回除法的浮点余数。 结果的数据类型是最小的数据类型,它可以保存与数据类型 number1
和 number2
相除得到的所有可能值。
如果 number1
或 number2
的计算结果为 0,则将其视为零。
相关运算符包括:
\ 运算符 (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
应用于包含此类重载的类或结构的实例,请确保了解其重新定义的行为。 有关详细信息,请参阅 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.