Поделиться через


Оператор 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

В следующем примере показано потенциальное отсутствие операндов с плавающей запятой. В первом операторе операнды: Double0,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.

См. также