Mod operátor (Visual Basic)
Két számot oszt el, és csak a maradékot adja vissza.
Syntax
result = number1 Mod number2
Részek
result
Szükséges. Bármilyen numerikus változó vagy tulajdonság.
number1
Szükséges. Bármilyen numerikus kifejezés.
number2
Szükséges. Bármilyen numerikus kifejezés.
Támogatott típusok
Minden numerikus típus. Ide tartoznak az aláíratlan és a lebegőpontos típusok és Decimal
a .
Eredmény
Az eredmény a maradék number1
után osztva a következővel number2
: . A kifejezés 14 Mod 4
például 2 értéket ad ki.
Feljegyzés
A matematikában különbség van a maradék és a modulus között, a negatív számok eltérő eredményeivel. A Mod
Visual Basic operátora, a .NET-keretrendszer op_Modulus
operátor és a mögöttes rem IL utasítás mind egy fennmaradó műveletet hajt végre.
A művelet eredménye Mod
megtartja az osztalék előjelét, number1
így pozitív vagy negatív lehet. Az eredmény mindig a tartomány (-number2
, number2
), kizárólagos. Példa:
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
Megjegyzések
Ha vagy number1
number2
lebegőpontos érték, az osztás lebegőpontos fennmaradó részét adja vissza a függvény. Az eredmény adattípusa a legkisebb adattípus, amely képes tárolni az összes lehetséges értéket, amely az és number1
number2
a .
Ha number1
a number2
semmit nem értékeli ki, akkor az nullaként lesz kezelve.
A kapcsolódó operátorok a következők:
A \ operátor (Visual Basic) egy osztás egész hányadosát adja vissza. A kifejezés
14 \ 4
például 3-ra értékel.A /operátor (Visual Basic) a teljes hányadost adja vissza, a többit is lebegőpontos számként. A kifejezés
14 / 4
például 3,5-ös értéket ad ki.
Osztási kísérlet nullával
Ha number2
a kiértékelés értéke nulla, az Mod
operátor viselkedése az operandusok adattípusától függ:
- Az integrált osztás kivételt DivideByZeroException okoz, ha
number2
nem határozható meg fordítási időben, és fordítási időpontban nullára értékelt fordítási időtBC30542 Division by zero occurred while evaluating this expression
number2
eredményez. - A lebegőpontos osztás eredménye Double.NaN.
Egyenértékű képlet
A kifejezés a Mod b
egyenértékű az alábbi képletek egyikével:
a - (b * (a \ b))
a - (b * Fix(a / b))
Lebegőpontos pontatlanság
Amikor lebegőpontos számokkal dolgozik, ne feledje, hogy a számok nem mindig rendelkeznek pontos decimális ábrázolással a memóriában. Ez bizonyos műveletek, például az érték-összehasonlítás és az Mod
operátor váratlan eredményeihez vezethet. További információ: Adattípusok hibaelhárítása.
Túlterhelés
Az Mod
operátor túlterhelhető, ami azt jelenti, hogy egy osztály vagy struktúra újradefiniálta a viselkedését. Ha a kód egy ilyen túlterhelést tartalmazó osztály vagy struktúra egy példányára vonatkozik Mod
, győződjön meg arról, hogy tisztában van az újradefiniált viselkedésével. További információ: Operátori eljárások.
1. példa
Az alábbi példa az operátorral Mod
két számot oszt el, és csak a maradékot adja vissza. Ha bármelyik szám lebegőpontos szám, az eredmény egy lebegőpontos szám, amely a maradékot jelöli.
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
2. példa
Az alábbi példa a lebegőpontos operandusok lehetséges pontatlanságát mutatja be. Az első utasításban az operandusok a következők Double
, a 0.2 pedig egy végtelenül ismétlődő bináris tört, amelynek tárolt értéke 0,2000000000001. A második utasításban a literál típusú karakter D
mindkét operandusra Decimal
kényszeríti az operandusokat, a 0.2 pedig pontos ábrázolású.
firstResult = 2.0 Mod 0.2
' Double operation returns 0.2, not 0.
secondResult = 2D Mod 0.2D
' Decimal operation returns 0.