Тип «Число»

Тип Число представляет собой число произвольной точности с фиксированной точкой.

Значение типа Число может быть задано литералом одного из следующих видов:
  • Двоичное число: 0b{0|1}+.
  • Десятичное число: [+|-]{0..9}[.{0..9}].
  • Шестнадцатеричное число: 0x{0..9|a..f|A..F}+.

Число состоит из знака числа, а также целой и дробной частей, разделенных точкой. Если задается двоичное или шестнадцатеричное число, то для такого числа невозможно задание дробной части, так как такие числа могут быть только целыми.

Операции, определенные для значений типа Число, описаны в разделе Операции.

Работа с числами

метод Скрипт()
    пер А: Число
    А = 15 // целое десятичное число
    А = 3.141592654 // дробное десятичное число
    А = 15/7 // выражение с использованием десятичных чисел
    А = 0xff // шестнадцатеричное число
    А = -0xff // отрицательное шестнадцатеричное число
    А = 0b10101 // двоичное число
;

Форматирование чисел

Для форматирования чисел используется встроенный метод Представление(), который принимает как аргумент указанный формат и возвращает строку с числом в этом формате.

Пример

В примере ниже для числа 123.456 вызывается метод Представление(), который позволяет представить это число в формате 'Результат: '6.2, который передается этому методу как аргумент. Результат форматирования помещается в переменную б:
метод Скрипт()
    пер а: Число = 123.456
    пер б = а.Представление("'Результат: '6.2")
    Консоль.Записать(б)
;
и выводится в консоль:
Результат: 123,46
При указании формата используется специальный синтаксис. Так, в примере выше форматная строка 'Результат: '6.2 состоит из следующих частей: 'Результат: ' — префикс, 6— ширина, 2 — точность. Подробнее о синтаксисе форматных строк смотрите ниже.

Синтаксис

В общем случае синтаксис форматной строки выглядит следующим образом: "['префикс'][флаги][ширина][.точность][специальные флаги]['суффикс']".

Вся форматная строка выделяется двойными кавычками. Префикс и суффикс указываются в отдельных одинарных кавычках (для экранирования). Являются необязательной частью форматной строки (могут не указываться). Необходимо, чтобы составляющие форматирующей части (флаги, ширина, точность, специальные флаги) следовали строго друг за другом в соответствии с синтаксисом.

Префикс

Текстовая часть форматной строки, которая добавляется перед отформатированным числом. Пример:

Для числа 123.123 применим форматную строку 'знач='7.2. Получим: знач= 123.12.

При использовании символа ' (одинарная кавычка) в префиксе его необходимо экранировать: '' (две идущие подряд одинарные кавычки). Пример:

Для числа 123.123 применим форматную строку 'знач''='7.2. Получим: знач'= 123.12.

Флаги
Используются непосредственно для форматирования выводимого числа. В отличие от специальных флагов определяются одним символом. При указании нескольких флагов указываются без разделительных знаков, могут указываться в произвольном порядке. При заполнении "свободного места", то есть разницы между исходными и указанными шириной/точностью, заполнитель по умолчанию — пробелы слева. Список флагов:
0
Свободное место заполняется нулями слева. Несовместим с флагом -. Пример:
Для числа 123.456 применим форматную строку 08.2. Получим: 00123,46.
-
Свободное место заполняется пробелами справа. Несовместим с флагом 0. Пример:
Для числа 123.456 применим форматную строку -7.2'$'. Получим: 123,46 $.
+
Положительные числа выводятся со знаком +. Пример:
Для числа 123.456 применим форматную строку +7.2. Получим: +123,46.
_
Группировка целой части по 3 цифры, начиная с младшего разряда. По умолчанию разделителем групп является символ неразрывного пробела  . Пример:
Для числа 123456789 применим форматную строку _10.2. Получим: 123 456 789,00.
(
Отрицательные числовые значения заключаются в скобки и берутся по модулю. Пишутся без знака -. Пример:
Для числа -123.456 применим форматную строку (6.2. Получим: (123,46).
Ширина

Определяет общую ширину числа после форматирования (без префикса и суффикса). Если ширина меньше полученного числа (с соблюдением всех флагов, включая специальные), то она динамически расширяется до ширины числа. Если ширина больше результата, то свободное место заполняется в соответствии с указанным флагом. Если ширина не указана, то она будет минимально возможной для вывода отформатированного числа. Примеры:

Для числа 123.123 укажем ширину 10. Получим:    123.123.

Для числа 123.123 укажем ширину 1. Получим: 123.123.

Точность

Определяет точность дробной части. Если указанная точность меньше, чем в исходном числе, то значение после десятичного разделителя округляется (по умолчанию: округление к ближайшему целому). Округление кастомизируется с помощью специального флага (ОК). Если указанная точность больше числа, то дробная часть дополняется нулями с конца. Если точность не указывается, то она соответствует точности исходного числа. Например:

Для числа 123.456 укажем точность .2. Получим: 123,46.

Специальные флаги
Синтаксис: специальный флаг=значение, где значение это разделитель или режим округления. Используются непосредственно для форматирования выводимого числа. В отличие от обычных флагов определяются не одним символом, а выражением. При указании нескольких флагов разделяются точкой с запятой (;), могут указываться в произвольном порядке. От предыдущей части форматной строки (если есть) также отделяются точкой с запятой. Пример: 'значение='РД=.'$'. Для удобства чтения допускается использование пробела (пробелов) для отделения специального флага от знака присваивания, но не допускается использование пробела после знака присваивания или после знака разделителя, так как в этом случае пробел будет восприниматься встроенным языком как собственно разделитель или часть разделителя. Пример: 'тест'(+_15.2; РГ =,; РД =.; ОК =ПВВ;'тест'. Список специальных флагов:
РГ

"Разделитель групп". Определяет разделитель групп в целой части. Принимает как значение символ разделителя (или символ в Unicode). Ожидается только вместе с флагом _, включающим разделение по группам. Пример:

Формат _;РГ=, для числа 123456789 даст результат 123,456,789.

РД

"Разделитель дробной". Определяет разделитель между целой и дробной частями. Принимает как значение символ разделителя (или символ в Unicode). Пример:

Формат РД=, для числа 123.456 даст результат 123,456.

ОК
"Округление". Определяет режим округления. Ожидается только вместе с указанием точности. Принимает одно из значений перечисления ВидОкругления (по умолчанию: ПВВ):
ВН
Округление "Вниз". Округляет к меньшему ближайшему целому. Пример:
Формат .0;ОК=ВН для числа 1.9 даст результат 1.
ВВ
Округление "Вверх". Округляет к большему ближайшему целому. Пример:
Формат .0;ОК=ВВ для числа 1.1 даст результат 2.
ПВН
Округление "ПоловинаВниз". Если < 5, округляет к меньшему ближайшему целому. Пример:
Формат .0;ОК=ПВН для числа 1.5 даст результат 1.
ПВВ
Округление "ПоловинаВверх". Если >= 5, округляет к большему ближайшему целому. Пример:
Формат .0;ОК=ПВВ для числа 1.5 даст результат 2.
Суффикс

Суффикс — это текстовая часть форматной строки (набор символов), которая добавляется после отформатированного числа. Например:

Для числа 123.123 применим форматную строку "-6.2' руб.'". Получим: 123,12 руб.

При использовании символа ' (одинарная кавычка) в суффиксе его необходимо экранировать: '' (две идущие подряд одинарные кавычки). Например:

Для числа 123.123 применим форматную строку "-6.2' руб.'''". Получим: 123,12 руб.'

Именованные стандартные форматы

Для упрощения работы с форматными строками можно использовать именованные стандартные форматы, при которых используется следующий синтаксис:

"['префикс']именованный_формат['суффикс']"

Заменяют специальным словом форматную часть строки. Позволяет "стандартизировать" различные форматы чисел. Список именованных стандартных форматов:
Деньги
Денежный/финансовый формат. Соответствует форматной строке _.2. Пример:
Формат "Деньги' руб.'" для числа 123123.123 даст результат: 123 123,12 руб..
Основание

Представляет число в другой системе счисления по указанному основанию. Доступно только для целых чисел. Если исходное число не является целым, или его вещественная часть не эквивалента 0, выбрасывается соответствующая ошибка IllegalArgumentBslException. Доступны системы счисления от 2 до 36. Целая часть не разбивается на группы. Ширина строки — минимально возможная для вывода числа в выбранной системе счисления. Для оснований от 2 до 9 возможны оба варианта синтаксиса: ОснованиеX или Основание0X. Пример:

Основание2 для числа 123 даст результат 1111011.

Процент
Процентный формат. Соответствует форматной строке _.2'%'. Пример:
Формат Процент для числа 0.12345 даст результат 12,35%.