Megosztás a következőn keresztül:


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 Decimala .

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 number1number2 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 number1number2a .

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őt BC30542 Division by zero occurred while evaluating this expressionnumber2 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 Decimalké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.

Lásd még