Operador Mod (Visual Basic)
Divide dois números e retorna apenas o restante.
Sintaxe
result = number1 Mod number2
Partes
result
Obrigatório. Qualquer variável numérica ou propriedade.
number1
Obrigatório. Qualquer expressão numérica.
number2
Obrigatório. Qualquer expressão numérica.
Tipos suportados
Todos os tipos numéricos. Isso inclui os tipos não assinados e de ponto flutuante e Decimal
.
Result
O resultado é o restante depois number1
é dividido por number2
. Por exemplo, a expressão 14 Mod 4
é avaliada como 2.
Nota
Há uma diferença entre o restante e o módulo em matemática, com resultados diferentes para números negativos. O Mod
operador no Visual Basic, o operador .NET Framework op_Modulus
e a instrução subjacente rem IL executam uma operação restante.
O resultado de uma Mod
operação retém o sinal do dividendo, number1
e por isso pode ser positivo ou negativo. O resultado está sempre na gama (-number2
, number2
), exclusiva. Por exemplo:
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
Observações
Se um ou number1
number2
é um valor de vírgula flutuante, o restante de vírgula flutuante da divisão é retornado. O tipo de dados do resultado é o menor tipo de dados que pode conter todos os valores possíveis resultantes da divisão com os tipos de dados de number1
e number2
.
Se number1
ou number2
avalia como Nada, é tratado como zero.
Os operadores relacionados incluem o seguinte:
O operador \ (Visual Basic) retorna o quociente inteiro de uma divisão. Por exemplo, a expressão
14 \ 4
é avaliada como 3.O / Operator (Visual Basic) retorna o quociente completo, incluindo o restante, como um número de vírgula flutuante. Por exemplo, a expressão
14 / 4
é avaliada como 3.5.
Tentativa de divisão por zero
Se number2
avaliado como zero, o comportamento do operador depende do tipo de Mod
dados dos operandos:
- Uma divisão integral lança uma DivideByZeroException exceção se
number2
não puder ser determinada em tempo de compilação e gera um erroBC30542 Division by zero occurred while evaluating this expression
em tempo de compilação senumber2
for avaliada como zero em tempo de compilação. - Uma divisão de ponto flutuante retorna Double.NaN.
Fórmula equivalente
A expressão a Mod b
é equivalente a uma das seguintes fórmulas:
a - (b * (a \ b))
a - (b * Fix(a / b))
Imprecisão de ponto flutuante
Quando você trabalha com números de vírgula flutuante, lembre-se de que eles nem sempre têm uma representação decimal precisa na memória. Isso pode levar a resultados inesperados de certas operações, como a comparação de valores e o Mod
operador. Para obter mais informações, consulte Solução de problemas de tipos de dados.
Sobrecarga
O Mod
operador pode estar sobrecarregado, o que significa que uma classe ou estrutura pode redefinir seu comportamento. Se seu código se aplica Mod
a uma instância de uma classe ou estrutura que inclui tal sobrecarga, certifique-se de entender seu comportamento redefinido. Para obter mais informações, consulte Procedimentos do operador.
Exemplo 1
O exemplo a seguir usa o Mod
operador para dividir dois números e retornar apenas o restante. Se um dos números for um número de vírgula flutuante, o resultado será um número de vírgula flutuante que representa o restante.
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
Exemplo 2
O exemplo a seguir demonstra a imprecisão potencial de operandos de ponto flutuante. Na primeira instrução, os operandos são Double
, e 0.2 é uma fração binária infinitamente repetitiva com um valor armazenado de 0.2000000000000001. Na segunda instrução, o caractere D
de tipo literal força ambos os operandos para Decimal
, e 0.2 tem uma representação precisa.
firstResult = 2.0 Mod 0.2
' Double operation returns 0.2, not 0.
secondResult = 2D Mod 0.2D
' Decimal operation returns 0.