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 и не позволил бы отличить ошибку ввода от настоящего нуля.