Mod operator (Visual Basic)

Dzieli dwie liczby i zwraca tylko resztę.

Składnia

result = number1 Mod number2

generatora

result
Wymagany. Dowolna zmienna liczbowa lub właściwość.

number1
Wymagany. Dowolne wyrażenie liczbowe.

number2
Wymagany. Dowolne wyrażenie liczbowe.

Obsługiwane typy

Wszystkie typy liczbowe. Obejmuje to typy niepodpisane i zmiennoprzecinkowe oraz Decimal.

Result

Wynik jest resztą po number1 podzieleniu przez number2. Na przykład wyrażenie 14 Mod 4 daje wartość 2.

Uwaga

Istnieje różnica między resztą a modulem w matematyce, z różnymi wynikami liczb ujemnych. Operator Mod w języku Visual Basic, operator .NET Framework op_Modulus i podstawowa instrukcja rem IL wykonują pozostałą operację.

Wynik Mod operacji zachowuje znak dywidendy, number1i dlatego może być dodatni lub ujemny. Wynik jest zawsze w zakresie (-number2, number2), wyłączność. Na przykład:

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

Uwagi

Jeśli wartość number1 zmiennoprzecinkowa lub number2 jest wartością zmiennoprzecinkową, zwracana jest pozostała część dzielenia. Typ danych wyniku jest najmniejszym typem danych, który może przechowywać wszystkie możliwe wartości wynikające z dzielenia z typami number1 danych i number2.

Jeśli number1 wartość nic nie zostanie obliczona lub number2 obliczona, jest traktowana jako zero.

Powiązane operatory obejmują następujące elementy:

  • Operator \ (Visual Basic) zwraca liczbę całkowitą dzielenia. Na przykład wyrażenie 14 \ 4 daje wartość 3.

  • Operator /(Visual Basic) zwraca pełny iloraz, w tym resztę, jako liczbę zmiennoprzecinkową. Na przykład wyrażenie 14 / 4 daje wartość 3,5.

Podjęto próbę dzielenia o zero

Jeśli number2 ma wartość zero, zachowanie Mod operatora zależy od typu danych operandów:

  • Podział całkowity zgłasza DivideByZeroException wyjątek, jeśli number2 nie można go określić w czasie kompilacji i generuje błąd BC30542 Division by zero occurred while evaluating this expression czasu kompilacji, jeśli number2 jest obliczany na zero w czasie kompilacji.
  • Dzielenie zmiennoprzecinkowe zwraca wartość Double.NaN.

Równoważna formuła

Wyrażenie a Mod b jest równoważne z jedną z następujących formuł:

a - (b * (a \ b))

a - (b * Fix(a / b))

Imprecision zmiennoprzecinkowa

Podczas pracy z liczbami zmiennoprzecinkowymi pamiętaj, że nie zawsze mają one dokładną reprezentację dziesiętną w pamięci. Może to prowadzić do nieoczekiwanych wyników niektórych operacji, takich jak porównanie wartości i Mod operator. Aby uzyskać więcej informacji, zobacz Rozwiązywanie problemów z typami danych.

Przeciążenie

Operator Mod może być przeciążony, co oznacza, że klasa lub struktura może ponownie zdefiniować jego zachowanie. Jeśli kod ma zastosowanie Mod do wystąpienia klasy lub struktury zawierającej takie przeciążenie, upewnij się, że rozumiesz jego ponownie zdefiniowane zachowanie. Aby uzyskać więcej informacji, zobacz Procedury operatorów.

Przykład 1

W poniższym przykładzie użyto Mod operatora , aby podzielić dwie liczby i zwrócić tylko resztę. Jeśli którakolwiek z liczb jest liczbą zmiennoprzecinkową, wynik jest liczbą zmiennoprzecinkową, która reprezentuje resztę.

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

Przykład 2

W poniższym przykładzie pokazano potencjalną nieprawdopodobną liczbę operandów zmiennoprzecinkowych. W pierwszej instrukcji operandy to Double, a 0,2 jest nieskończenie powtarzanym ułamkiem binarnym z przechowywaną wartością 0,2000000000000001. W drugiej instrukcji znak D typu literału wymusza zarówno operandy na Decimal, jak i 0,2 ma dokładną reprezentację.

firstResult = 2.0 Mod 0.2
' Double operation returns 0.2, not 0.
secondResult = 2D Mod 0.2D
' Decimal operation returns 0.

Zobacz też