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 erroreBC30542 Division by zero occurred while evaluating this expression
in fase di compilazione senumber2
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 Decimal
e 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.