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, number1
i 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łądBC30542 Division by zero occurred while evaluating this expression
czasu kompilacji, jeślinumber2
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.