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 только показывает его.