Оператор mod (Visual Basic)
Делит два числа и возвращает только оставшуюся часть.
Синтаксис
result = number1 Mod number2
Детали
result
Обязательный. Любая числовая переменная или свойство.
number1
Обязательный. Произвольное числовое выражение.
number2
Обязательный. Произвольное числовое выражение.
Поддерживаемые типы
все числовые типы. Сюда входят типы без знака и с плавающей запятой.Decimal
Результат
Результатом является оставшаяся часть после number1
деления на number2
. Например, выражение 14 Mod 4
имеет значение 2.
Примечание.
Существует разница между оставшимися и модулами в математике, с разными результатами для отрицательных чисел. Оператор Mod
в Visual Basic, оператор платформа .NET Framework op_Modulus
и базовая инструкция rem IL выполняют оставшуюся операцию.
Результат Mod
операции сохраняет знак дивиденда, number1
и поэтому он может быть положительным или отрицательным. Результат всегда находится в диапазоне (-number2
, number2
), эксклюзивный. Например:
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
Замечания
number1
Если значение с плавающей запятой или number2
является, возвращается оставшаяся часть деления с плавающей запятой. Тип данных результата — это наименьший тип данных, который может содержать все возможные значения, которые приводят к делениям с типами number1
данных и number2
.
Если number1
или number2
оценивается как "Ничего", он обрабатывается как ноль.
Связанные операторы включают следующие:
Оператор \ (Visual Basic) возвращает целочисленный кворот деления. Например, выражение
14 \ 4
имеет значение 3.Оператор / (Visual Basic) возвращает полный кворот, включая оставшуюся часть, в виде числа с плавающей запятой. Например, выражение
14 / 4
оценивается как 3,5.
Попытка деления на ноль
Если number2
значение равно нулю, поведение Mod
оператора зависит от типа данных операндов:
- Целочисленное деление создает DivideByZeroException исключение, если
number2
не удается определить во время компиляции и создает ошибкуBC30542 Division by zero occurred while evaluating this expression
во время компиляции, еслиnumber2
вычисляется до нуля во время компиляции. - Возвращается Double.NaNделение с плавающей запятой.
Эквивалентная формула
Выражение a Mod b
эквивалентно любой из следующих формул:
a - (b * (a \ b))
a - (b * Fix(a / b))
Нерекоменция с плавающей запятой
При работе с числами с плавающей запятой помните, что они не всегда имеют точное десятичное представление в памяти. Это может привести к непредвиденным результатам определенных операций, таких как сравнение значений Mod
и оператор. Дополнительные сведения см. в разделе "Устранение неполадок типов данных".
Перегрузка
Оператор Mod
может быть перегружен, что означает, что класс или структура могут переопределить его поведение. Если код применяется Mod
к экземпляру класса или структуры, включающей такие перегрузки, убедитесь, что вы понимаете его переопределенное поведение. Для получения дополнительной информации см. Operator Procedures.
Пример 1
В следующем примере оператор используется Mod
для разделения двух чисел и возврата только оставшейся части. Если любое число является числом с плавающей запятой, результатом является число с плавающей запятой, представляющее оставшуюся часть.
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
В следующем примере показано потенциальное отсутствие операндов с плавающей запятой. В первом операторе операнды: Double
0,2 — бесконечно повторяющаяся двоичная дробь с сохраненным значением 0,200000000000000000000001. Во втором операторе символ D
литерального типа заставляет операндов Decimal
и 0,2 точное представление.
firstResult = 2.0 Mod 0.2
' Double operation returns 0.2, not 0.
secondResult = 2D Mod 0.2D
' Decimal operation returns 0.