Dela via


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 kompileringsfel BC30542 Division by zero occurred while evaluating this expression om number2 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 Doubleoperanderna , 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.

Se även