API Basic Arithmetic uk - LIHACHTETAN/ClassicUO-BadNewbie-BasicIDE GitHub Wiki

+, -, *, /, MOD

ClassicUO • Basic

Арифметичний вираз обчислює значення з операндів. + додає, - віднімає або змінює знак, * множить, / ділить, MOD дає цілочисельну остачу. Збережіть вираз у змінну або поверніть через RETURN для подальшого використання.

Точний синтаксис

left + right
left - right
-right
left * right
left / right
left MOD right
(expression)

Параметри

  • left — Лівий числовий операнд: літерал, оголошена змінна, вираз у дужках або результат функції. Унарний мінус не має лівого операнда.
  • right — Правий числовий операнд. Для / це дільник; для MOD він перетворюється на Integer і після перетворення має бути ненульовим. Наприклад, дільник MOD 0.5 усікається до 0 та спричиняє помилку.
  • operator / precedence — Спочатку унарний -, потім * / MOD з однаковим пріоритетом зліва направо, потім бінарні + - зліва направо. Дужки змінюють порядок. Унарний +, степінь ^ і цілочисельне ділення зворотною скісною рискою не підтримуються.

Повертає

Integer для цілочисельних +, -, * й унарного мінуса. Якщо числовий операнд має вид Decimal, ці операції дають Decimal. / завжди дає Decimal, навіть для двох цілих: 5/2=2.5. MOD дає Integer. Це обчислене число; зміст успішності чи кількості предметів визначає сам скрипт.

Поведінка

  • MOD перетворює обидва операнди на знакові 32-бітні цілі за правилами рушія, відкидаючи допустимі дробові частини до нуля. Остача має знак діленого: -17 MOD 5=-2. -2147483648 MOD -1 дає рівно 0. Регістр слова, зокрема mOd, не впливає на результат.
  • MOD із нульовим дільником спричиняє помилку, яку обробляє TRY/CATCH. / використовує дробове ділення: ненульовий чисельник при діленні на нуль дає Infinity зі знаком, 0/0 — NaN. Для звичайного скінченного результату перевіряйте дільник заздалегідь.
  • Цілочисельні +, -, *, зміна знака при переповненні зберігають молодші 32 біти; автоматичного переходу до більшого Integer немає. Для великих розрахунків можна завчасно перетворити операнд на Decimal, якщо допустима наближеність. Дробова арифметика має похибку двійкового округлення.
  • Звичайні числові оператори самі не розбирають текст. String+String поєднує рядки, String+Integer спричиняє помилку. Для числового тексту явно вибирайте перетворення, наприклад CDbl. Інфіксний MOD розбирає цілочисельний текст суворіше за окрему функцію BasicMod.
  • Рушій обчислює операнди за порядком виразу, вибирає операцію за токеном і створює InjectionValue. Вкладений вираз у дужках завершується першим. Руху, очікування чи мережі немає, якщо сам операнд не викликає відповідне API.

Приклади

1. Пріоритет і дужки

# plain=2+3*4 спочатку множить і дає 14. grouped=(2+3)*4 дає 20. Main повертає plain*100+grouped=1420 для перевірки обох розрахунків.
Option Explicit On
SUB Main()
    VAR plain = 2 + 3 * 4
    VAR grouped = (2 + 3) * 4
    RETURN plain * 100 + grouped
END SUB

Пояснення параметрів і виконання:

plain=2+3*4 спочатку множить і дає 14. grouped=(2+3)4 дає 20. Main повертає plain100+grouped=1420 для перевірки обох розрахунків.

2. Повні партії та залишок предметів

# DescribeBatches отримує total=27 і size=5. Перевірка size відхиляє нульовий/від’ємний розмір партії. Fix(total/size) перетворює 5.4 на 5 повних партій; total mOd size дає 2 залишкові предмети. CStr формує повернений текст "5:2". Функцію наведено повністю.
Option Explicit On
FUNCTION DescribeBatches(total, size)
    IF size <= 0 THEN
        RETURN "invalid"
    END IF
    VAR whole = Fix(total / size)
    VAR remaining = total mOd size
    RETURN CStr(whole) + ":" + CStr(remaining)
END FUNCTION
SUB Main()
    RETURN DescribeBatches(27, 5)
END SUB

Пояснення параметрів і виконання:

DescribeBatches отримує total=27 і size=5. Перевірка size відхиляє нульовий/від’ємний розмір партії. Fix(total/size) перетворює 5.4 на 5 повних партій; total mOd size дає 2 залишкові предмети. CStr формує повернений текст "5:2". Функцію наведено повністю.

3. Обробити неправильний дільник

# У 10 MOD 0 дільник нульовий. Помилка виникає до присвоєння unusedResult. CATCH зберігає її у problem і ставить caught=TRUE. Main повертає 1 — ознаку обробки помилки в прикладі, а не результат невдалого MOD.
Option Explicit On
SUB Main()
    VAR caught = FALSE
    TRY
        VAR unusedResult = 10 MOD 0
    CATCH problem
        caught = TRUE
    END TRY
    RETURN caught
END SUB

Пояснення параметрів і виконання:

У 10 MOD 0 дільник нульовий. Помилка виникає до присвоєння unusedResult. CATCH зберігає її у problem і ставить caught=TRUE. Main повертає 1 — ознаку обробки помилки в прикладі, а не результат невдалого MOD.


en · ru · uk · fr · de · it · es · zh-tw · ja · ko

Basic