Mod-Operator (Visual Basic)
Dividiert zwei Zahlen und gibt nur den Rest zurück.
Syntax
result = number1 Mod number2
Bestandteile
result
Erforderlich. Eine beliebige numerische Variable oder Eigenschaft.
number1
Erforderlich. Ein beliebiger numerischer Ausdruck.
number2
Erforderlich. Ein beliebiger numerischer Ausdruck.
Unterstützte Typen
allen numerischen Typen Dies schließt Typen ohne Vorzeichen, Gleitkommatypen und Decimal
ein.
Ergebnis
Das Ergebnis ist der Rest der Division von number1
durch number2
. Der Ausdruck 14 Mod 4
ergibt beispielsweise 2.
Hinweis
In der Mathematik gibt es einen Unterschied zwischen Rest und Betrag, der bei negativen Zahlen zu unterschiedlichen Ergebnissen führt. Der Mod
-Operator in Visual Basic, der .NET Framework-Operator op_Modulus
und die zugrunde liegende rem-Zwischenspracheanweisung führen jeweils eine Restoperation aus.
Beim Ergebnis einer Mod
-Operation bleibt das Vorzeichen des Dividenden (number1
) erhalten. Daher kann es positiv oder negativ sein. Das Ergebnis liegt immer im Bereich (-number2
, number2
) (ausschließlich). Beispiel:
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
Bemerkungen
Wenn entweder number1
oder number2
ein Gleitkommawert ist, wird der Gleitkommarest der Division zurückgegeben. Der Datentyp des Ergebnisses ist der kleinste Datentyp, der alle möglichen Werte enthalten kann, die sich aus der Division mit den Datentypen von number1
und number2
ergeben.
Wenn number1
oder number2
als Nothing auswertet wird, wird der Wert als null behandelt.
Verwandte Operatoren:
Der \-Operator (Visual Basic) gibt den ganzzahligen Quotienten einer Division zurück. Der Ausdruck
14 \ 4
ergibt beispielsweise 3.Der /-Operator (Visual Basic) gibt den vollständigen Quotienten (einschließlich des Rests) als Gleitkommazahl zurück. Der Ausdruck
14 / 4
ergibt beispielsweise 3,5.
Versuchte Division durch null
Wenn die Auswertung von number2
einen Nullwert ergibt, hängt das Verhalten des Mod
-Operators vom Datentyp der Operanden ab:
- Bei einer ganzzahligen Division wird eine Ausnahme vom Typ DivideByZeroException ausgelöst, wenn
number2
zur Kompilierzeit nicht bestimmt werden kann, und es wird ein Kompilierzeitfehler vom TypBC30542 Division by zero occurred while evaluating this expression
generiert, wennnumber2
zur Kompilierzeit null ergibt. - Bei einer Gleitkommadivision wird Double.NaN zurückgegeben.
Gleichwertige Formel
Der Ausdruck a Mod b
entspricht einer der folgenden Formeln:
a - (b * (a \ b))
a - (b * Fix(a / b))
Gleitkomma-Ungenauigkeit
Wenn Sie mit Gleitkommazahlen arbeiten, denken Sie daran, dass im Arbeitsspeicher nicht immer eine genaue Dezimaldarstellung vorhanden ist. Dies kann zu unerwarteten Ergebnissen bei bestimmten Vorgängen wie dem Wertvergleich und dem Mod
-Operator führen. Weitere Informationen finden Sie unter Problembehandlung bei Datentypen (Visual Basic).
Überladen
Der Mod
-Operator kann überladen werden. Das bedeutet, dass eine Klasse oder Struktur ihr Verhalten neu definieren kann. Wenn Ihr Code Mod
auf eine Instanz einer Klasse oder Struktur anwendet, die eine solche Überladung enthält, ist es wichtig, mit dem neu definierten Verhalten vertraut zu sein. Weitere Informationen finden Sie unter Operator Procedures.
Beispiel 1
Im folgenden Beispiel wird der Mod
-Operator verwendet, um zwei Zahlen zu dividieren und nur den Rest zurückzugeben. Wenn eine Zahl eine Gleitkommazahl ist, ist das Ergebnis eine Gleitkommazahl, die den Rest darstellt.
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
Beispiel 2
Im folgenden Beispiel wird die potenzielle Ungenauigkeit von Gleitkommaoperanden veranschaulicht. In der ersten Anweisung werden Operanden vom Typ Double
verwendet, und „0.2“ ist ein sich unendlich wiederholender binärer Bruch mit einem gespeicherten Wert von 0,20000000000000001. In der zweiten Anweisung wird durch das Literal-Typzeichen D
für beide Operanden Decimal
erzwungen, um 0.2 exakt darzustellen.
firstResult = 2.0 Mod 0.2
' Double operation returns 0.2, not 0.
secondResult = 2D Mod 0.2D
' Decimal operation returns 0.