Operador Mod (Visual Basic)

Divide dos números y devuelve solo el resto.

Sintaxis

result = number1 Mod number2

Partes

result
Necesario. Cualquier variable numérica o propiedad.

number1
Obligatorio. Cualquier expresión numérica.

number2
Obligatorio. Cualquier expresión numérica.

Tipos admitidos

todos los tipos numéricos. Esto incluye los tipos de punto flotante y sin signo y Decimal .

Resultado

El resultado es el resto después number1 de dividirse por number2 . Por ejemplo, la expresión 14 Mod 4 se evalúa como 2.

Nota

Hay una diferencia entre el resto y el módulo en matemáticas, con resultados diferentes para números negativos. El operador de Visual Basic, el operador .NET Framework y la instrucción il rem subyacente Mod realizan una operación de op_Modulus resto.

El resultado de una operación conserva el signo del dividendo, , por lo que Mod puede ser positivo o number1 negativo. El resultado siempre está en el intervalo (- 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 o es un valor de punto flotante, se devuelve el resto de punto flotante number1 number2 de la división. El tipo de datos del resultado es el tipo de datos más pequeño que puede contener todos los valores posibles resultantes de la división con los tipos de datos number1 de y number2 .

Si number1 o se evalúa como number2 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 depende del tipo de datos de los Mod operandos:

  • Una división integral produce una excepción si no se puede determinar en tiempo de compilación y genera un error en tiempo de compilación si se evalúa como cero en tiempo DivideByZeroException number2 de BC30542 Division by zero occurred while evaluating this expression number2 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 fórmulas siguientes:

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 resultados inesperados de determinadas operaciones, como la comparación de valores y el Mod operador . Para obtener más información, vea Solución de problemas de tipos de datos.

Sobrecarga

El Mod operador se puede sobrecargar, lo que significa que una clase o estructura puede volver a definir su comportamiento. Si el código se aplica a una instancia de una clase o estructura que incluye dicha sobrecarga, asegúrese de que Mod comprende su comportamiento redefinido. Para obtener más información, consulta Operator Procedures.

Ejemplo 1

En el ejemplo siguiente se usa Mod el operador 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 imprecisión potencial de operandos de punto flotante. En la primera instrucción, los operandos son y 0,2 es una fracción binaria que se repite infinitamente con un valor almacenado Double de 0,20000000000000000001. En la segunda instrucción, el carácter de tipo literal fuerza ambos D operandos Decimal a 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.

Consulta también