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ón BC30542 Division by zero occurred while evaluating this expression si number2 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.

Consulte también