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 \ 4se 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 / 4se 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
number2deBC30542 Division by zero occurred while evaluating this expressionnumber2compilació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.