Арифметические (математические) операторы, использующиеся в VBA Excel. Их предназначение, особенности вычислений, приоритет в выражениях.
Обзор арифметических операторов
Операторы | Описание |
---|---|
Оператор «+» | Сложение двух чисел или объединение двух строк (для объединения строк предпочтительнее использовать оператор «&») |
Оператор «-» | Вычитание (определение разности двух чисел) или отрицание (отражение отрицательного значения числового выражения: -15, -a) |
Оператор «*» | Умножение двух чисел |
Оператор «/» | Деление двух чисел (деление на 0 приводит к ошибке) |
Оператор «^» | Возведение числа в степень |
Оператор «\» | Целочисленное деление |
Оператор «Mod» | Возвращает остаток от деления двух чисел |
Особенности операторов «\» и «Mod»
Перед вычислением целочисленного результата или остатка от деления двух чисел делимое и делитель округляются. Причем, используется бухгалтерское округление:
- -3.5 => -4
- -2.5 => -2
- -1.5 => -2
- -0.5 => 0
- 0.5 => 0
- 1.5 => 2
- 2.5 => 2
- 3.5 => 4
Следующие строки вызовут ошибку «Division by zero» («Деление на ноль»):
1 2 |
a = 3 Mod 0.5 a = 3 \ (2 - 2.5) |
Чтобы избежать ошибок, когда требуется общепринятое математическое округление, округляйте делитель и делимое с помощью оператора WorksheetFunction.Round.
Приоритет арифметических операторов
Приоритет определяет очередность выполнения математических операторов в одном выражении. Очередность выполнения арифметических операторов в VBA Excel следующая:
- «^» – возведение в степень;
- «—» – отрицание;
- «*» и «/» – умножение и деление;1
- «\» – целочисленное деление;
- «Mod» – остаток от деления двух чисел;
- «+» и «—» – сложение и вычитание.2
1 Если умножение и деление выполняются в одном выражении, то каждая такая операция выполняется слева направо в порядке их следования.
2 Если сложение и вычитание выполняются в одном выражении, то каждая такая операция выполняется слева направо в порядке их следования.
Для переопределения приоритета выполнения математических операторов в VBA Excel используются круглые скобки. Сначала выполняются арифметические операторы внутри скобок, затем — операторы вне скобок. Внутри скобок приоритет операторов сохраняется.
1 2 3 |
a = 3 ^ 2 + 1 'a = 10 a = 3 ^ (2 + 1) 'a = 27 a = 3 ^ (2 + 1 * -2) 'a = 1 |
Никак не могу догнать, почему 10 Mod 3 получается 1?
10/3=3,33333333333333
от 3,33333333333333 отбрасываем 3 остается 0,33
Если округлить Round(0.33), то получается 0 а не 1.
Есть объяснение? Спасибо!
Привет, Собир!
Оператор Mod рассчитывает остаток от деления также, как мы при делении чисел столбиком:
10/3=3 ⇒ 3*3=9 ⇒ 10-9=1
А 0,33… – это уже результат деления остатка 1 на 3
>Никак не могу догнать, почему 10 Mod 3 получается 1?
Собир, по правилам математики.
10 / 3 = 3 целых и остаток от деления 1, то есть 3 * 3 + 1 = 10
Обсуждение закрыто.