Operador Mod (Visual Basic)
Divide dois números e retorna apenas o resto.
Sintaxe
result = number1 Mod number2
Partes
result
Obrigatórios. Qualquer variável ou propriedade numérica.
number1
Obrigatórios. Qualquer expressão numérica.
number2
Obrigatórios. Qualquer expressão numérica.
Tipos com suporte
Todos os tipos numéricos. Isso inclui os tipos de ponto flutuante e sem sinal e Decimal
.
Result
O resultado é o restante após number1
ser dividido por number2
. Por exemplo, a expressão 14 Mod 4
é avaliada como 2.
Observação
Há uma diferença entre o restante e o módulo em matemática, com resultados diferentes para números negativos. O operador Mod
no Visual Basic, o operador .NET Framework op_Modulus
e a instrução IL rem subjacente executam uma operação restante.
O resultado de uma operação Mod
retém o sinal do dividendo, number1
, e pode ser positivo ou negativo. O resultado está sempre no intervalo (-number2
, number2
), exclusivo. 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
Comentários
Se number1
ou number2
for um valor de ponto flutuante, o restante do ponto flutuante da divisão será 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
for avaliada como Nothing, ela será tratada 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 operador / (Visual Basic) retorna o quociente completo, incluindo o restante, como um número de ponto flutuante. Por exemplo, a expressão
14 / 4
é avaliada como 3,5.
Tentativa de divisão por zero
Se number2
for avaliado como zero, o comportamento do operador Mod
depende do tipo de dados dos operandos:
- Uma divisão integral lança uma exceção DivideByZeroException se
number2
não puder ser determinado em tempo de compilação e gera um erro em tempo de compilaçãoBC30542 Division by zero occurred while evaluating this expression
senumber2
for avaliado 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 qualquer 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 ponto flutuante, tenha em mente que eles nem sempre têm uma representação decimal precisa na memória. Isso pode levar a resultados inesperados de determinadas operações, como a comparação de valores e o operador Mod
. Para obter mais informações, consulte Tipos de dados de solução de problemas.
Sobrecarga
O operador Mod
pode ser sobrecarregado, o que significa que uma classe ou uma estrutura pode redefinir o comportamento. Se o código aplicar Mod
a uma instância de uma classe ou estrutura que inclui essa sobrecarga, entenda o comportamento redefinido. Para obter mais informações, confira Procedimentos de operador.
Exemplo 1
O exemplo a seguir usa o operador Mod
para dividir dois números e retornar apenas o restante. Se um dos números for um número de ponto flutuante, o resultado será um número de ponto 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 possível imprecisão dos operandos de ponto flutuante. Na primeira instrução, os operandos são Double
, e 0,2 é uma fração binária infinitamente repetida com um valor armazenado de 0,20000000000000001. Na segunda instrução, o caractere de tipo literal D
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.