Compartilhar via


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 com suporte

Todos os tipos numéricos. Isso inclui os tipos de ponto flutuante e sem sinal e Decimal.

Resultado

O resultado é o restante depois number1 de 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 Mod operador no Visual Basic, o operador .NET Framework op_Modulus e a instrução IL de rem subjacente executam uma operação restante.

O resultado de uma Mod operação mantém o sinal do dividendo e, portanto, number1pode 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

Observações

Se ou number1number2 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 avaliado como Nothing, ele será 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 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 Mod operador dependerá do tipo de dados dos operandos:

  • Uma divisão integral gera uma DivideByZeroException exceção se number2 não puder ser determinada em tempo de compilação e gerar um erro BC30542 Division by zero occurred while evaluating this expression de tempo de compilação se number2 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 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, lembre-se de que nem sempre eles têm uma representação decimais precisa na memória. Isso pode levar a resultados inesperados de determinadas operações, como a comparação de valor e o Mod operador. Para obter mais informações, consulte Solucionar problemas de tipos de dados.

Sobrecarga

O Mod operador pode ser sobrecarregado, o que significa que uma classe ou estrutura pode redefinir seu comportamento. Se o código se aplicar Mod a uma instância de uma classe ou estrutura que inclua tal sobrecarga, certifique-se de entender seu comportamento redefinido. Para obter mais informações, consulte Procedimentos de 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 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 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 recorrente com um valor armazenado de 0,2000000000000000001. Na segunda instrução, o caractere D de tipo literal força ambos os operandos a 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.

Consulte também