API CSng - LIHACHTETAN/ClassicUO-BadNewbie-BasicIDE GitHub Wiki
CSng
Оглавление · Алфавитный указатель · BASIC built-ins
ClassicUO • Runtime API
Преобразует числовое значение или текст в Decimal.
Точный синтаксис
CSng(value:Any) -> Decimal
Выберите одну из зарегистрированных форм. Параметры передаются позиционно. Any означает значение BASIC с преобразованием внутри команды; Unit — отсутствие возвращаемого значения.
Параметры
value— Число Integer/Decimal или числовая строка с точкой и необязательной экспонентой, например "-1.25e2". Преобразование не зависит от языка интерфейса. Нераспознанная строка, Unit, Array и Object преобразуются в 0. Для пользовательского ввода сначала проверяйте IsNumeric.
Возвращает
Decimal — число double. При нераспознанном тексте возвращается 0. CSng использует ту же реализацию, что CDbl: дополнительного округления к 32-битному float нет.
Поведение
- Вычисляется локально, без ожидания ответа сервера.
- Decimal в этом языке хранится как double: возможна погрешность двоичной арифметики. Это не десятичный финансовый тип .NET decimal.
Примеры
Пример 1. Десятичная строка
# Десятичная строка
#
# Преобразует числовое значение или текст в Decimal.
#
# Decimal — число double. При нераспознанном тексте возвращается 0. CSng использует ту же
# реализацию, что CDbl: дополнительного округления к 32-битному float нет.
SUB Main()
# value содержит точку независимо от выбранного языка.
# Ожидаемый результат: 12.75. value сохраняет возвращённое значение; Print только выводит его.
VAR value = CSng('12.75')
UO.Print(STR(value))
END SUB
Разбор параметров и выполнения:
- value содержит точку независимо от выбранного языка.
- Ожидаемый результат: 12.75. value сохраняет возвращённое значение; Print только выводит его.
Пример 2. Экспоненциальная запись
# Экспоненциальная запись
#
# Преобразует числовое значение или текст в Decimal.
#
# Decimal — число double. При нераспознанном тексте возвращается 0. CSng использует ту же
# реализацию, что CDbl: дополнительного округления к 32-битному float нет.
SUB Main()
# e2 означает умножение на 10 в квадрате.
# Ожидаемый результат: 150 (Decimal). value сохраняет возвращённое значение; Print только
# выводит его.
VAR value = CSng('1.5e2')
UO.Print(STR(value))
END SUB
Разбор параметров и выполнения:
- e2 означает умножение на 10 в квадрате.
- Ожидаемый результат: 150 (Decimal). value сохраняет возвращённое значение; Print только выводит его.
Пример 3. Обработать ошибочный ввод
# Обработать ошибочный ввод
#
# Преобразует числовое значение или текст в Decimal.
#
# Decimal — число double. При нераспознанном тексте возвращается 0. CSng использует ту же
# реализацию, что CDbl: дополнительного округления к 32-битному float нет.
SUB Main()
# text не является числом, поэтому выполняется ELSE.
# Прямой вызов CSng(text) дал бы 0 и не позволил бы отличить ошибку ввода от настоящего нуля.
VAR text = 'invalid'
IF IsNumeric(text) THEN
UO.Print(STR(CSng(text)))
ELSE
UO.Print('Not a number')
END IF
END SUB
Разбор параметров и выполнения:
- text не является числом, поэтому выполняется ELSE.
- Прямой вызов CSng(text) дал бы 0 и не позволил бы отличить ошибку ввода от настоящего нуля.