Condividi tramite


Operatore Mod (Visual Basic)

Divide due numeri e restituisce solo il resto.

Sintassi

result = number1 Mod number2

Parti

result
Obbligatorio. Qualsiasi variabile o proprietà numerica.

number1
Obbligatorio. Qualsiasi espressione numerica.

number2
Obbligatorio. Qualsiasi espressione numerica.

Tipi supportati

tutti i tipi numerici. Sono inclusi i tipi senza segno e a virgola mobile e Decimal.

Risultato

Il risultato è il resto dopo che number1 viene diviso per number2. Ad esempio, l'espressione 14 Mod 4 restituisce 2.

Nota

C'è una differenza tra resto e modulo in matematica, con risultati diversi per i numeri negativi. L'operatore Mod in Visual Basic, l'operatore op_Modulus di .NET Framework e l'istruzione rem IL sottostante eseguono tutti un'operazione di resto.

Il risultato di un'operazione Mod mantiene il segno del dividendo, number1, e quindi può essere positivo o negativo. Il risultato è sempre compreso nell'intervallo (-number2, number2), esclusivo. Ad esempio:

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

Osservazioni:

Se number1 o number2 è un valore a virgola mobile, viene restituito il resto a virgola mobile della divisione. Il tipo di dati del risultato è il tipo di dati più piccolo che può contenere tutti i valori possibili risultanti dalla divisione con i tipi di dati number1 e number2.

Se number1 o number2 restituisce Nothing, viene considerato come zero.

Gli operatori correlati includono:

  • L'Operatore \ (Visual Basic) restituisce il quoziente intero di una divisione. Ad esempio, l'espressione 14 \ 4 restituisce 3.

  • L'operatore / (Visual Basic) restituisce il quoziente completo, incluso il resto, come numero a virgola mobile. Ad esempio, l'espressione 14 / 4 restituisce 3.5.

Tentativo di divisione per zero

Se number2 restituisce zero, il comportamento dell'operatore Mod dipende dal tipo di dati degli operandi:

  • Una divisione integrale genera un'eccezione DivideByZeroException se number2 non può essere determinata in fase di compilazione e genera un errore BC30542 Division by zero occurred while evaluating this expression in fase di compilazione se number2 viene valutato come zero in fase di compilazione.
  • Una divisione a virgola mobile restituisce Double.NaN.

Formula equivalente

L'espressione a Mod b equivale a una delle formule seguenti:

a - (b * (a \ b))

a - (b * Fix(a / b))

Imprecisione a virgola mobile

Quando si lavora con numeri a virgola mobile, tenere presente che non hanno sempre una rappresentazione decimale precisa in memoria. Ciò può causare risultati imprevisti da determinate operazioni, ad esempio il confronto dei valori e l'operatore Mod. Per altre informazioni, vedere Risoluzione dei problemi relativi ai tipi di dati.

Overload

L'operatore Mod può essere sottoposto a overload, il che significa che una classe o una struttura può ridefinirne il comportamento. Se il codice applica Mod a un'istanza di una classe o di una struttura che include tale overload, assicurarsi di comprenderne il comportamento ridefinito. Per altre informazioni, vedere Operator Procedures.

Esempio 1

Nell'esempio seguente viene usato l'operatore Mod per dividere due numeri e restituire solo il resto. Se uno dei due numeri è un numero a virgola mobile, il risultato è un numero a virgola mobile che rappresenta il 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

Esempio 2

Nell'esempio seguente viene illustrata la potenziale imprecisione degli operandi a virgola mobile. Nella prima istruzione, gli operandi sono Double e 0,2 è una frazione binaria infinitamente ripetuta con un valore archiviato pari a 0,20000000000000001. Nella seconda istruzione il carattere di tipo letterale D forza entrambi gli operandi a Decimale 0.2 ha una rappresentazione precisa.

firstResult = 2.0 Mod 0.2
' Double operation returns 0.2, not 0.
secondResult = 2D Mod 0.2D
' Decimal operation returns 0.

Vedi anche