Mod-operator (Visual Basic)
Verdeelt twee getallen en retourneert alleen het restgetal.
Syntaxis
result = number1 Mod number2
generator
result
Vereist. Elke numerieke variabele of eigenschap.
number1
Vereist. Elke numerieke expressie.
number2
Vereist. Elke numerieke expressie.
Ondersteunde typen
Alle numerieke typen. Dit omvat de niet-ondertekende en drijvendekommatypen en Decimal
.
Resultaat
Het resultaat is de rest na number1
gedeeld door number2
. De expressie 14 Mod 4
resulteert bijvoorbeeld in 2.
Notitie
Er is een verschil tussen rest en modulus in wiskunde, met verschillende resultaten voor negatieve getallen. De Mod
operator in Visual Basic, de .NET Framework-operator op_Modulus
en de onderliggende rem IL-instructie voeren allemaal een restbewerking uit.
Het resultaat van een Mod
bewerking behoudt het teken van het dividend, number1
en kan dus positief of negatief zijn. Het resultaat bevindt zich altijd in het bereik (-number2
, number2
), exclusief. Voorbeeld:
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
Opmerkingen
Als een number1
drijvende-kommawaarde of number2
een drijvende-kommawaarde is, wordt de rest van de drijvende komma geretourneerd. Het gegevenstype van het resultaat is het kleinste gegevenstype dat alle mogelijke waarden kan bevatten die het gevolg zijn van delen met de gegevenstypen en number1
number2
.
Als number1
of number2
evalueert naar niets, wordt het beschouwd als nul.
Gerelateerde operators omvatten het volgende:
De \-operator (Visual Basic) retourneert het gehele getal van een deling. De expressie
14 \ 4
resulteert bijvoorbeeld in 3.De /Operator (Visual Basic) retourneert het volledige quotiënt, inclusief de rest, als een drijvendekommagetal. De expressie
14 / 4
resulteert bijvoorbeeld in 3,5.
Poging tot delen door nul
Als number2
de waarde nul is, is het gedrag van de Mod
operator afhankelijk van het gegevenstype van de operanden:
- Een integrale deling genereert een DivideByZeroException uitzondering als
number2
deze niet kan worden bepaald in de compilatietijd en genereert een compilatietijdfoutBC30542 Division by zero occurred while evaluating this expression
alsnumber2
deze wordt geëvalueerd op nul tijdens het compileren. - Een drijvendekommageling retourneert Double.NaN.
Equivalente formule
De expressie a Mod b
is gelijk aan een van de volgende formules:
a - (b * (a \ b))
a - (b * Fix(a / b))
Onnauwkeurigheid van drijvende komma
Wanneer u met drijvendekommagetalnummers werkt, moet u er rekening mee houden dat ze niet altijd een nauwkeurige decimale weergave in het geheugen hebben. Dit kan leiden tot onverwachte resultaten van bepaalde bewerkingen, zoals waardevergelijking en de Mod
operator. Zie Problemen met gegevenstypen oplossen voor meer informatie.
Overbelasting
De Mod
operator kan overbelast raken, wat betekent dat een klasse of structuur het gedrag ervan opnieuw kan definiëren. Als uw code van toepassing is op Mod
een instantie van een klasse of structuur die een dergelijke overbelasting omvat, moet u het opnieuw gedefinieerde gedrag begrijpen. Zie Operator Procedures voor meer informatie.
Voorbeeld 1
In het volgende voorbeeld wordt de Mod
operator gebruikt om twee getallen te delen en alleen de rest te retourneren. Als een van beide getallen een drijvendekommagetal is, is het resultaat een drijvendekommagetal dat de rest vertegenwoordigt.
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
Voorbeeld 2
In het volgende voorbeeld ziet u de mogelijke onnauwkeurigheid van operanden met drijvende komma. In de eerste instructie zijn Double
de operanden en is 0,2 een oneindig herhalende binaire breuk met een opgeslagen waarde van 0,20000000000000000001. In de tweede instructie dwingt het letterlijke type teken D
beide operanden tot Decimal
, en 0,2 heeft een nauwkeurige weergave.
firstResult = 2.0 Mod 0.2
' Double operation returns 0.2, not 0.
secondResult = 2D Mod 0.2D
' Decimal operation returns 0.