Mod-operator (Visual Basic)
Delar upp två tal och returnerar endast resten.
Syntax
result = number1 Mod number2
Delar
result
Obligatoriska. Valfri numerisk variabel eller egenskap.
number1
Obligatoriska. Alla numeriska uttryck.
number2
Obligatoriska. Alla numeriska uttryck.
Typer som stöds
Alla numeriska typer. Detta inkluderar de osignerade och flyttalstyperna och Decimal
.
Resultat
Resultatet är resten efter number1
divideras med number2
. Uttrycket 14 Mod 4
utvärderas till exempel till 2.
Kommentar
Det finns en skillnad mellan rest och modulus i matematik, med olika resultat för negativa tal. Operatorn Mod
i Visual Basic, .NET Framework-operatorn op_Modulus
och den underliggande rem IL-instruktionen utför alla en reståtgärd.
Resultatet av en Mod
åtgärd behåller tecknet på utdelningen, number1
, så det kan vara positivt eller negativt. Resultatet är alltid i intervallet (-number2
, number2
), exklusivt. Till exempel:
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
Kommentarer
Om antingen number1
eller number2
är ett flyttalvärde returneras resten av divisionens flyttal. Datatypen för resultatet är den minsta datatypen som kan innehålla alla möjliga värden som är resultatet av division med datatyperna number1
och number2
.
Om number1
eller number2
utvärderas till Ingenting behandlas det som noll.
Relaterade operatorer omfattar följande:
\- operatorn (Visual Basic) returnerar heltalskvoten för en division. Uttrycket
14 \ 4
utvärderas till exempel till 3.Operatorn /(Visual Basic) returnerar den fullständiga kvoten, inklusive resten, som ett flyttalsnummer. Uttrycket
14 / 4
utvärderas till exempel till 3,5.
Försök till division med noll
Om number2
utvärderas till noll beror operatorns Mod
beteende på operandernas datatyp:
- En integrerad division utlöser ett DivideByZeroException undantag om
number2
det inte går att fastställa i kompileringstid och genererar ett kompileringsfelBC30542 Division by zero occurred while evaluating this expression
omnumber2
det utvärderas till noll vid kompileringstid. - En flyttalsdivision returnerar Double.NaN.
Motsvarande formel
Uttrycket a Mod b
motsvarar någon av följande formler:
a - (b * (a \ b))
a - (b * Fix(a / b))
Flyttalsimprecision
När du arbetar med flyttalsnummer ska du komma ihåg att de inte alltid har en exakt decimalrepresentation i minnet. Detta kan leda till oväntade resultat från vissa åtgärder, till exempel värdejämförelse och operatorn Mod
. Mer information finns i Felsöka datatyper.
Överbelastning
Operatorn Mod
kan överbelastas, vilket innebär att en klass eller struktur kan omdefiniera sitt beteende. Om koden gäller Mod
för en instans av en klass eller struktur som innehåller en sådan överbelastning bör du vara säker på att du förstår dess omdefinierade beteende. Mer information finns i Operatorprocedurer.
Exempel 1
I följande exempel används operatorn Mod
för att dela upp två tal och returnera endast resten. Om något av talen är ett flyttalsnummer är resultatet ett flyttalsnummer som representerar resten.
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
Exempel 2
I följande exempel visas den potentiella imprecisionen av flyttalsoperor. I den första instruktionen är Double
operanderna , och 0.2 är ett oändligt upprepande binärt bråk med ett lagrat värde på 0,2000000000001. I den andra instruktionen tvingar teckentypen D
literal båda operanderna till Decimal
, och 0.2 har en exakt representation.
firstResult = 2.0 Mod 0.2
' Double operation returns 0.2, not 0.
secondResult = 2D Mod 0.2D
' Decimal operation returns 0.