EnotPRO Logo EnotPRO

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 + 3) * 4 20
- Унарный минус -5 + 3 -2

⚠️ Важно: Других операторов нет. Возведения в степень (^, **) и остатка от деления (%) не существует — вместо них используйте функции pow(основание, степень) и mod(делимое, делитель). Выражение с ^ или % вернёт пустой результат.

Приоритет операций

Уровень Операторы Ассоциативность
1 (высший) ( ) — скобки Сначала вычисляется выражение в скобках
2 * / — умножение, деление Слева направо
3 (низший) + - — сложение, вычитание Слева направо

Примеры расчёта:

Выражение Как вычисляется Результат
2 + 3 * 4 3*4=12, затем 2+12 14
(2 + 3) * 4 2+3=5, затем 5*4 20
10 - 3 - 2 10-3=7, затем 7-2 5 (слева направо)
pow(2, 3) * 2 2 в степени 3 = 8, затем 8*2 16

Числа

Тип Описание Пример
Целые числа Целочисленные значения 5, 42, -10
Дробные числа Числа с плавающей точкой 3.14, 0.5, -7.25

⚠️ Важно: Разделитель дробной части — точка (.), а не запятая.

Правила записи чисел:

  • Целая часть обязательна: 0.5 работает, .5 вызовет ошибку
  • Экспоненциальная запись не поддерживается. Выражение 1.5e3 не выдаст ошибку, но всё после числа будет отброшено, и результат окажется 1.5. Большие и малые числа пишите полностью: 1500, 0.0000001
  • Все вычисления идут с плавающей точкой, деление всегда дробное: 10 / 4 даст 2.5, а не 2. Для целого результата используйте floor, trunc или round
  • Целые результаты выводятся без дробной части: 4, а не 4.0

Математические функции

Регистр названия не важен (pow, POW, Pow — одно и то же), аргументы разделяются запятой.

Группа Функции
Округление round, roundToEven, floor, ceil, trunc
Общие abs, min, max, mod, remainder, dim, copySign, nextAfter, fma
Степени и корни pow, sqrt, cbrt, hypot
Логарифмы и экспонента exp, exp2, expm1, log, log2, log10, log1p, logb
Тригонометрия sin, cos, tan, asin, acos, atan, atan2
Гиперболические sinh, cosh, tanh, asinh, acosh, atanh
Специальные gamma, erf, erfc, erfInv, erfcInv, j0, j1, y0, y1, nan

Часто используемые:

Выражение Описание Результат
pow(2, 10) Возведение в степень 1024
sqrt(16) Квадратный корень 4
abs(-5) Модуль числа 5
round(2.5) Округление до ближайшего целого 3
floor(10 / 3) Округление вниз 3
ceil(2.1) Округление вверх 3
min(3, 7) Меньшее из двух 3
max(3, 7) Большее из двух 7
mod(7, 3) Остаток от деления 1

💡 Тригонометрические функции работают с радианами. Для градусов переводите вручную: sin(90 * pi / 180).

Константы

Регистр не важен.

Константа Значение Описание
pi 3.141592653589793 Число π
e 2.718281828459045 Основание натурального логарифма
phi 1.618033988749895 Золотое сечение
sqrt2 1.4142135623730951 Корень из 2
sqrtE 1.6487212707001282 Корень из e
sqrtPi 1.772453850905516 Корень из π
sqrtPhi 1.272019649514069 Корень из φ
ln2 0.6931471805599453 Натуральный логарифм 2
ln10 2.302585092994046 Натуральный логарифм 10
log2E 1.4426950408889634 Логарифм e по основанию 2
log10E 0.4342944819032518 Логарифм e по основанию 10

Пример:

!{math|2 * pi * 5} => 31.41592653589793

Использование переменных

В выражении можно использовать переменные из контекста.

Примеры:

Прибавить 10 к переменной пользователя

!{math|${var.person.score} + 10}

Вычислить скидку 15% от суммы

!{math|${var.person.amount} * 0.85}

Ограничить значение диапазоном от 0 до 100

!{math|max(0, min(100, ${var.person.score}))}

💡 Совет: Переменные должны содержать числовые значения. Если переменная пуста или содержит текст, вычисление может дать ошибку или некорректный результат.

Использование макросов внутри !{math}

Макросы можно вкладывать друг в друга. Внутренний макрос выполняется первым, его результат подставляется в выражение.

Примеры:

Случайное число от 1 до 6, умноженное на 100

!{math|!{random.number|min:1; max:6} * 100}

Текущий Unix timestamp, делённый на 3600 (часы)

!{math|!{time|value:now; output_format:unix} / 3600}

Сколько полных лет аккаунту пользователя

!{math|floor((!{time|output_format:unix} - !{tgdate|output_format:unix}) / 31557600)}

Примеры

Базовые арифметические операции

  • !{math|2 + 2} => 4
  • !{math|10 - 3} => 7
  • !{math|4 * 5} => 20
  • !{math|15 / 3} => 5
  • !{math|mod(10, 3)} => 1
  • !{math|pow(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|pow(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)}

Округлённый до целого результат деления

!{math|round(!{time|value:now; output_format:unix} / 3600)}

Ошибки и их решение

Ошибка Причина Решение
Пустой результат В выражении есть текст, пустая переменная или неверный синтаксис Проверьте, что все переменные содержат числа
Пустой результат Использованы ^, ** или % Замените на pow(...) и mod(...)
+Inf или -Inf в тексте Деление на ноль Добавьте проверку перед делением
NaN в тексте Деление нуля на ноль или недопустимый аргумент функции Проверьте входные значения
Неожиданно маленькое число Использована запись вида 1.5e3 Пишите число полностью: 1500
Результат обрезан В выражение попал текст: 2+2abc вернёт 4 Проверьте подстановку переменных
Неверный результат Неправильный приоритет операций Используйте скобки для явного указания порядка

⚠️ Параметры default и error в этом макросе не работают: они становятся частью выражения и ломают его. Запись !{math|2+2;default:0} всегда вернёт 0.

Быстрые ответы (шпаргалка)

Нужно Выражение
2 + 2 !{math|2 + 2}
Процент от числа !{math|${var.person.amount} * 0.15}
Скидка 15% !{math|${var.person.amount} * 0.85}
Возведение в степень !{math|pow(2, 10)}
Остаток от деления !{math|mod(10, 3)}
Целая часть от деления !{math|floor(10 / 3)}
Округление !{math|round(${var.person.score})}
Ограничить диапазоном !{math|max(0, min(100, ${var.person.score}))}
Сложное выражение !{math|(${a} + ${b}) * ${c}}
Случайный бонус !{math|!{random.number|min:1; max:10} * 100}
© 2025 EnotPRO. Все права защищены.