Перейти к основному содержимому

Тип «Число»

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

Значение типа Число может быть задано литералом одного из следующих видов:

  • Двоичное число: 0b{0|1}+.
  • Десятичное число: [+|-]{0..9}[.{0..9}].
  • Шестнадцатеричное число: 0x{0..9|a..f|A..F}+.

Также значение типа Число может быть задано с помощью конструктора, который преобразует строковое представление в соответствующий экземпляр числа. С помощью перегрузки конструктора можно преобразовать число с заданным основанием.

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

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

Пример работы с числами

Использование литерала
пер А: Число
А = 15 // целое десятичное число
А = 3.141592654 // дробное десятичное число
А = 15/7 // выражение с использованием десятичных чисел
А = 0xff // шестнадцатеричное число
А = -0xff // отрицательное шестнадцатеричное число
А = 0b10101 // двоичное число
Использование конструктора
новый Число("123") -> 123      // целое десятичное число
новый Число("+1.23") -> 1.23 // дробное десятичное число
новый Число("-12.3") -> -12.3 // отрицательное дробное десятичное число
новый Число("1.23e+2") -> 123 // число в экспоненциальной форме
новый Число("-1.23e2") -> -123 // отрицательное число в экспоненциальной форме
Использование конструктора с заданным основанием
новый Число("123", 10) -> 123       // целое десятичное число
новый Число("+4f865", 16) -> 325733 // шестнадцатеричное число
новый Число("cDf65", 16) -> 843621 // шестнадцатеричное число
новый Число("-3E8", 16) -> -1000 // отрицательное шестнадцатеричное число
новый Число("123E-2", 10) -> 1.23 // десятичное число в экспоненциальной форме

Представление чисел в зависимости от локали

В зависимости от текущей локали представление числа будет отличаться:

  • В русской локализации в качестве разделителя между целой и дробной частью используется запятая, а группы по три цифры в целой части отделяются неразрывным пробелом — 123 456,78.
  • В английской локализации дробная часть отделяется точкой, а группировка целой части выполняется через запятую — 123,456.78.

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

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

В примере ниже для числа 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, выбрасывается следующая ошибка: «Перевод нецелых чисел в другие системы счисления не поддерживается». Доступны системы счисления от 2 до 36. Целая часть не разбивается на группы. Ширина строки — минимально возможная для вывода числа в выбранной системе счисления. Для оснований от 2 до 9 возможны оба варианта синтаксиса: ОснованиеX или Основание0X.

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

Процент

Процентный формат. Соответствует форматной строке _.2'%'.

Например, формат Процент для числа 0.12345 даст результат 12,35%.