Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Dzieli dwie liczby i zwraca tylko resztę.
Składnia
result = number1 Mod number2
Części
result
To jest wymagane. Dowolna zmienna liczbowa lub właściwość.
number1
To jest wymagane. Dowolne wyrażenie liczbowe.
number2
To jest wymagane. Dowolne wyrażenie liczbowe.
Obsługiwane typy
Wszystkie typy liczbowe. Obejmuje to typy niepodpisane i zmiennoprzecinkowe oraz Decimal.
Wynik
Wynik jest resztą po number1 podzieleniu przez number2. Na przykład wyrażenie 14 Mod 4 daje wartość 2.
Uwaga / Notatka
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ść. 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 \ 4daje wartość 3.Operator /(Visual Basic) zwraca pełny iloraz, w tym resztę, jako liczbę zmiennoprzecinkową. Na przykład wyrażenie
14 / 4daje 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
number2nie można go określić w czasie kompilacji i generuje błądBC30542 Division by zero occurred while evaluating this expressionczasu kompilacji, jeślinumber2jest 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.