API val - LIHACHTETAN/ClassicUO-BadNewbie-BasicIDE GitHub Wiki

val

Оглавление · Алфавитный указатель · BASIC built-ins

ClassicUO • Runtime API

Разбирает всю строку как целое либо дробное число.

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

val(str:String) -> Any

Выберите одну из зарегистрированных форм. Параметры передаются позиционно. Any означает значение BASIC с преобразованием внутри команды; Unit — отсутствие возвращаемого значения.

Параметры

  • str — Числовой текст с необязательным знаком, внешними пробелами, десятичной точкой и экспонентой. Hex 0x не поддерживается: используйте ASC(text,fallback) или UO.Hex2Int.

Возвращает

Integer, если удалось разобрать Int32; иначе Decimal, если удалось разобрать double; иначе Integer 0. Неверный ввод неотличим по одному результату от числа 0. Внутри Decimal используется double, не финансовый тип decimal.

Поведение

  • Выполняется локально и не обращается к игровому серверу. Исходная строка не изменяется: результат нужно сохранить или передать дальше.
  • Позиции и длины строк считаются в единицах UTF-16. Символ за пределами BMP, например emoji, занимает две единицы. Это не количество байтов UTF-8.

Примеры

Пример 1. Целое количество

# Целое количество
#
# Разбирает всю строку как целое либо дробное число.
#
# Integer, если удалось разобрать Int32; иначе Decimal, если удалось разобрать double; иначе
# Integer 0. Неверный ввод неотличим по одному результату от числа 0. Внутри Decimal
# используется double, не финансовый тип decimal.

SUB Main()
    # Строка целиком помещается в Int32.
    # Ожидаемый результат: 350 (Integer). В result сохраняется результат выражения; Print только
    # показывает его.

    VAR result = val('350')
    UO.Print(CStr(result))
END SUB

Разбор параметров и выполнения:

  • Строка целиком помещается в Int32.
  • Ожидаемый результат: 350 (Integer). В result сохраняется результат выражения; Print только показывает его.

Пример 2. Дробь с экспонентой

# Дробь с экспонентой
#
# Разбирает всю строку как целое либо дробное число.
#
# Integer, если удалось разобрать Int32; иначе Decimal, если удалось разобрать double; иначе
# Integer 0. Неверный ввод неотличим по одному результату от числа 0. Внутри Decimal
# используется double, не финансовый тип decimal.

SUB Main()
    # Экспонента разрешена для дробного разбора; используется точка.
    # Ожидаемый результат: 125 (Decimal). В result сохраняется результат выражения; Print только
    # показывает его.

    VAR result = val('1.25e2')
    UO.Print(CStr(result))
END SUB

Разбор параметров и выполнения:

  • Экспонента разрешена для дробного разбора; используется точка.
  • Ожидаемый результат: 125 (Decimal). В result сохраняется результат выражения; Print только показывает его.

Пример 3. Текст с посторонним суффиксом

# Текст с посторонним суффиксом
#
# Разбирает всю строку как целое либо дробное число.
#
# Integer, если удалось разобрать Int32; иначе Decimal, если удалось разобрать double; иначе
# Integer 0. Неверный ввод неотличим по одному результату от числа 0. Внутри Decimal
# используется double, не финансовый тип decimal.

SUB Main()
    # В отличие от некоторых BASIC реализаций, префикс 50 отдельно не извлекается.
    # Ожидаемый результат: 0 (Integer). В result сохраняется результат выражения; Print только
    # показывает его.

    VAR result = val('50 items')
    UO.Print(CStr(result))
END SUB

Разбор параметров и выполнения:

  • В отличие от некоторых BASIC реализаций, префикс 50 отдельно не извлекается.
  • Ожидаемый результат: 0 (Integer). В result сохраняется результат выражения; Print только показывает его.