math
Макрос !{math} вычисляет математические выражения. Поддерживает базовые арифметические операции, возведение в степень, скобки и переменные.
Где используется:
- В любом тексте (сообщения, заголовки HTTP-запросов, тело запроса)
- В настройках переменных (значение для SetVarCloud / SetVarLocal)
- В условиях (для динамических диапазонов)
💡 Совет: Макрос удобен для подсчёта суммы, скидки, бонусов — любых вычислений внутри бота.
Синтаксис
!{math|выражение}
Правила:
- Выражение может содержать числа, операторы, переменные
(${...})и другие макросы(!{...}) - Пробелы в выражении игнорируются
- Поддерживаются скобки для изменения приоритета
Примеры вызова:
!{math|2 + 2}
!{math|10 * 5 - 3}
!{math|${var.person.score} + 10}
!{math|!{random.number|min:1; max:6} * 100}
!{math|(10 + 5) * 2}
Поддерживаемые операторы
| Оператор | Описание | Приоритет | Пример | Результат |
|---|---|---|---|---|
| + | Сложение | 1 | (низкий) 5 + 3 | 8 |
| - | Вычитание | 1 | 10 - 4 | 6 |
| * | Умножение | 2 | (средний) 4 * 3 | 12 |
| / | Деление | 2 | 15 / 3 | 5 |
| % | Остаток от деления | 2 | 10 % 3 | 1 |
| ^ | Возведение в степень | 3 | (высокий) 2 ^ 3 | 8 |
| ** | Возведение в степень (альтернатива) | 3 | 2 ** 3 | 8 |
| ( ) | Скобки | — | (2 + 3) * 4 | 20 |
Приоритет операций (от высокого к низкому)
- Скобки
( ) - Возведение в степень
^/** - Умножение, деление, остаток от деления
*/% - Сложение, вычитание
+-
Операции с одинаковым приоритетом выполняются слева направо.
Поддерживаемые типы данных
| Тип | Описание | Пример |
|---|---|---|
| Целые числа | Целочисленные значения | 5, 42, -10 |
| Дробные числа | Числа с плавающей точкой | 3.14, 0.5, -7.25 |
⚠️ Важно: В выражениях используется точка (.), а не запятая, как разделитель дробной части.
Использование переменных
В выражении можно использовать переменные из контекста.
Примеры:
Прибавить 10 к переменной пользователя
!{math|${var.person.score} + 10}
Вычислить скидку 15% от суммы
!{math|${var.person.amount} * 0.85}
Сравнить с порогом (хотя для условий лучше использовать Number)
!{math|${var.person.balance} - 100}
💡 Совет: Переменные должны содержать числовые значения. Если переменная пуста или содержит текст, вычисление может дать ошибку или некорректный результат.
Использование макросов внутри !{math}
Макросы можно вкладывать друг в друга. Внутренний макрос выполняется первым, его результат подставляется в выражение.
Примеры:
Случайное число от 1 до 6, умноженное на 100
!{math|!{random.number|min:1; max:6} * 100}
Текущий Unix timestamp, делённый на 3600 (часы)
!{math|!{time|value:now; output_format:unix} / 3600}
Комбинация нескольких макросов
!{math|!{random.number|min:1; max:10} + !{random.number|min:1; max:10}}
Примеры
Базовые арифметические операции
!{math|2 + 2}=> 4!{math|10 - 3}=> 7!{math|4 * 5}=> 20!{math|15 / 3}=> 5!{math|10 % 3}=> 1!{math|2 ^ 3}=> 8
Приоритет операций
!{math|2 + 3 * 4}=> 14 => Сначала умножение: 3*4=12, потом 2+12=14!{math|(2 + 3) * 4}=> 20 => Сначала скобки: 2+3=5, потом 5*4=20!{math|2 ^ 3 * 2}=> 16 => Сначала степень: 2^3=8, потом 8*2=16!{math|10 - 3 - 2}=> 5 => Слева направо: 10-3=7, потом 7-2=5
С переменными
Предположим, у пользователя есть переменная score = 25
!{math|${var.person.score} + 5}
Результат: 30
!{math|${var.person.score} * 2 - 10}
Результат:* 40
!{math|(${var.person.score} + 10) / 5}
Результат: 7
С макросами
Случайный бонус от 1 до 10% к текущему счёту
!{math|${var.person.score} * (1 + !{random.number|min:1; max:10} / 100)}
Текущий час в 24-часовом формате
!{math|!{time|value:now; output_format:unix} / 3600 % 24}
Ошибки и их решение
| Ошибка | Причина | Решение |
|---|---|---|
| Пустой результат | В выражении есть текст или пустая переменная | Проверьте, что все переменные содержат числа |
| NaN (Not a Number) | Деление на ноль | Добавьте проверку перед делением |
| Неверный результат | Неправильный приоритет операций | Используйте скобки для явного указания порядка |
| Макрос не выполняется | Неверный синтаксис | Убедитесь, что выражение заключено в !{math...} |