Mod (Operador, Visual Basic)
Divide dos números y devuelve solo el resto.
Sintaxis
result = number1 Mod number2
Partes
result
Necesario. Cualquier propiedad o variable numérica.
number1
Obligatorio. Cualquier expresión numérica.
number2
Obligatorio. Cualquier expresión numérica.
Tipos admitidos
Todos los tipos numéricos, Se incluyen los tipos de punto flotante, sin signo y Decimal
.
Resultado
El resultado es el resto tras dividir number1
entre number2
. Por ejemplo, la expresión 14 Mod 4
se evalúa en 2.
Nota
Hay una diferencia entre el resto y el módulo en matemáticas, con resultados diferentes para los números negativos. El operador Mod
de Visual Basic, el operador op_Modulus
.NET Framework y la instrucción IL rem subyacente realizan una operación de resto.
El resultado de una operación Mod
conserva el signo del dividendo, number1
, por lo que puede ser positivo o negativo. El resultado está siempre en el rango (-number2
, number2
), exclusivo. Por ejemplo:
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
Observaciones
Si number1
o number2
es un valor de punto flotante, se devuelve el resto de punto flotante de la división. El tipo de datos del resultado es el más pequeño que pueda contener todos los valores posibles que se derivan de la división con los tipos de datos de number1
y number2
.
Si number1
o number2
se evalúan como Nothing, se trata como cero.
Entre los operadores relacionados se incluyen los siguientes:
El operador \ (Visual Basic) devuelve el cociente entero de una división. Por ejemplo, la expresión
14 \ 4
se evalúa como 3.El operador / (Visual Basic) devuelve el cociente completo, incluido el resto, como un número de punto flotante. Por ejemplo, la expresión
14 / 4
se evalúa como 3.5.
Intento de división por cero
Si number2
se evalúa como cero, el comportamiento del operador Mod
depende del tipo de datos de los operandos:
- Una división integral genera una excepción DivideByZeroException si
number2
no se puede determinar en tiempo de compilación y genera un error en tiempo de compilaciónBC30542 Division by zero occurred while evaluating this expression
sinumber2
se evalúa como cero en tiempo de compilación. - Una división de punto flotante devuelve Double.NaN.
Fórmula equivalente
La expresión a Mod b
es equivalente a cualquiera de las siguientes fórmulas:
a - (b * (a \ b))
a - (b * Fix(a / b))
Imprecisión de punto flotante
Cuando trabaje con números de punto flotante, recuerde que no siempre tienen una representación decimal precisa en la memoria. Esto puede dar lugar a que haya resultados inesperados en determinadas operaciones, como la comparación de valores y el operador Mod
. Para más información, consulte Solución de problemas de los tipos de datos.
Sobrecarga
El operador Mod
se puede sobrecargar, lo que significa que una clase o estructura puede redefinir su comportamiento. Si el código aplica Mod
a una instancia de una clase o estructura que incluye dicha sobrecarga, asegúrese de que conoce su comportamiento redefinido. Para obtener más información, consulta Operator Procedures.
Ejemplo 1
En el ejemplo siguiente se usa el operador Mod
para dividir dos números y devolver solo el resto. Si cualquiera de los números es un número de punto flotante, el resultado es un número de punto flotante que representa el resto.
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
Ejemplo 2
En el ejemplo siguiente se muestra la posible imprecisión de los operandos de punto flotante. En la primera instrucción, los operandos son Double
y 0,2 es una fracción binaria repetida infinitamente con un valor almacenado de 0,20000000000000001. En la segunda instrucción, el carácter de tipo literal D
fuerza que ambos operandos sean Decimal
y 0,2 tiene una representación precisa.
firstResult = 2.0 Mod 0.2
' Double operation returns 0.2, not 0.
secondResult = 2D Mod 0.2D
' Decimal operation returns 0.