Link Search Menu Expand Document

Число

Иерархия типа

graph BT;
Число-->Форматируемое;
Форматируемое-->Представляемое;
Представляемое-->Объект;
Число-->Сравнимое&ltЧисло>
Сравнимое&ltЧисло&gt-->Объект;

Десятичное число. Максимально допустимая разрядность числа 38 знаков.

Сравнение структурное.


Примеры

знч Двоичный = 0b11011
знч Десятичный = 27
знч Шестнадцатеричный = 0x1B

Литералы

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

Арифметические операции

  • Число + Число = Число (сложение)
  • Число - Число = Число (вычитание)
  • Число * Число = Число (умножение)
  • Число / Число = Число (деление)
  • Число % Число = Число (остаток от деления)
  • Число ** Число = Число (возведение в степень)
  • -Число = Число (унарный минус)

Приоритет операций (в порядке уменьшения):

  • Выражения в круглых скобках
    • (унарный минус)
  • Операции *, /, %, **
  • Операции +, -

Конструкторы

Число

Число(Строка: Строка)

Преобразует строковое представление в соответствующий экземпляр числа. Поддерживаемые форматы:

  • Целые, дробные числа
  • Числа в экспоненциальной записи

Примеры:

новый Число("123") -> 123
новый Число("+1.23") -> 1.23
новый Число("-12.3") -> -12.3
новый Число("1.23e+2") -> 123
новый Число("-1.23e2") -> -123
новый Число("123E-2") -> 1.23

Исключения

ИсключениеНедопустимыйФормат - если представление не является валидным.


Методы

ВСтроку

ВСтроку(): Строка
Переопределение: ВСтроку
Перегрузка:
ВСтроку(Основание: Число): Строка

Возвращает десятичное представление числа в формате литерала. Пример: "250000.50".


ВСтроку

ВСтроку(Основание: Число): Строка
Перегрузка:
ВСтроку(): Строка

Применим только к целым числам. Возвращает число в формате литерала, переведенное в заданную систему счисления. Доступны системы счисления от 2 до 36. Примеры:

(134).ToString(4) -> 2012
(134).ВСтроку(3) -> 11222

Исключения

ИсключениеНедопустимыйАргумент - если в другую систему счисления переводится нецелое число или введена некорректная система счисления для перевода в нее числа.


Округлить

Округлить(Режим: РежимОкругления): Число
Перегрузка:
Округлить(Разрядность: Число = 0, Режим: РежимОкругления = РежимОкругления.ПоловинаВверх): Число

Возвращает число, округленное до целой части по правилу, заданному режимом округления Режим.


Округлить

Округлить(
  Разрядность: Число = 0,
  Режим: РежимОкругления = РежимОкругления.ПоловинаВверх
): Число
Перегрузка:
Округлить(Режим: РежимОкругления): Число

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


Представление

Представление(): Строка
Переопределение: Представление
Перегрузка:
Представление(Формат: Строка): Строка

Возвращает десятичное представление числа в следующем формате: 1) в качестве символа разделителя между дробной и целой частью выступает "," (запятая); 2) в качестве символа разделителя групп в целой части (цифры группируются по 3, начиная с младшего разряда) выступает символ " " (неразрывный пробел); 3) в дробной части выводятся все разряды дробной части, как в исходном числе (отсутствие точности).

Данный формат соответствует форматной строке "_".

Пример: “250 000,50”.


Представление

Представление(Формат: Строка): Строка
Переопределение: Представление
Перегрузка:
Представление(): Строка

Возвращает десятичное представление числа, отформатированное в соответствии с форматной строкой Формат.

Устройство форматной строки

Форматная строка состоит из 3 частей, следующих друг за другом непрерывно (без каких-либо символов разделителей): 1) префикс; 2) форматирующая часть, не может быть представлена пустой строкой; 3) суффикс.

Имеет следующий синтаксис:

"'префикс'форматирующая_часть'суффикс'"

Префикс и суффикс в форматной строке в обязательном порядке указываются в отдельных одинарных кавычках.

Префикс

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

Примеры:

'val=' -> в итоговой строке префикс будет выглядеть, как val=

'''val=''' -> в итоговой строке префикс будет выглядеть, как 'val='

Форматирующая часть

Форматирующая часть состоит из четырех частей:

[флаги][ширина][.точность][специальные флаги]

Все части должны идти в обязательном порядке друг за другом в соответствии с порядком, указанным выше.

Флаги

Флаги позволяют управлять форматом строки с обрабатываемым числом. Если необходимо указать несколько флагов — они указываются в любом порядке друг за другом без разделительных символов. Флаги могут не указываться в форматной строке.

“Свободное место” будет вычисляться по формуле: MAX(Заданная ширина строки (0, в случае если не задана) - Минимальная ширина для вывода отформатированного числа, 0). Иными словами — количество символов, которых не хватает в отформатированном числе до значения ширина. По умолчанию — свободное место заполняется пробелами слева.

Флаг Значение
0 Свободное место будет заполнено нулями слева. Не совместим с флагом -.
- Свободное место будет заполнено пробелами справа. Не совместим с флагом 0.
+ Положительные числа выводятся со знаком +.
_ Группировка целой части по 3 цифры, начиная с младшего разряда. По умолчанию разделителем групп является символ неразрывного пробела “ ”.
( Отрицательные числовые значения заключаются в скобки и берутся по модулю (пишутся без знака минус).

Ширина

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

Примеры:

Для числа 1.234 применим форматную строку "6". Получим: “ 1,234”

Для числа 123123 применим форматную строку "1". Получим: “123123”

Точность

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

Пример: 1.2 с точностью 4 → “1.2000”.

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

Специальные флаги

Специальные флаги служат для кастомизации выводимого числа. Специальные флаги, как и обычные флаги, могут указываться в произвольном порядке, но обязательно должны отделяться друг от друга символом “;” (точка с запятой). Также они должны быть отделены от предыдущей части символом “;” (точка с запятой), кроме случая, когда в форматирующей части строки нет никаких подчастей, кроме специальных флагов — тогда допускается не указывать символ разделитель.

Пример: "'val='РД=.'$'".

Синтаксис специальных флагов допускает использование пробелов для отделения названия специального флага от знака разделителя и знака присваивания.

Пример: "'test'(+_15.2; РГ =,; РД =.; ОК =ПВВ;'test'".

Однако, недопустимо отделение значения специального флага от знака присваивания и знака разделителя.

Нельзя: "'test'(+_15.2; РГ = , ;'test'"

В обязательном порядке подряд последовательно должны идти знак присваивания (=), значение специального флага(символ, либо режим округления для ОК), знак разделитель(;).

Специальные флаги могут не указываться в форматной строке.

Англоязычное название специального флага Русскоязычное название специального флага Значение
"DG=X" "РГ=X" Образовано от разделитель групп (delimiter group). Ввод знака-разделителя групп в целой части (вместо X ожидается какой-либо символ (либо код символа в формате \uкод)). Данный специальный флаг ожидается только вместе с флагом "_", включающим разделение по группам целой части.
"DF=X" "РД=X" Образовано от разделитель дробной (delimiter fractional). Ввод знака-разделителя между целой и дробной частью (вместо X ожидается какой-либо символ (либо код символа в формате \uкод)).
"RD=MODE" "ОК=РЕЖИМ" Флаг-режим округления.

Специальный флаг ОК имеет 4 режима округления, которые совпадают с режимами, введенными перечислением РежимОкругления, и отличаются от них лишь сокращенными названиями.

Англоязычное название специального флага Русскоязычное название специального флага Значение
"RD=DN" "ОК=ВН" Аналогичен РежимОкругления.Вниз / RoundingMode.Down. Округление к меньшему по модулю.
"RD=UP" "ОК=ВВ" Аналогичен РежимОкругления.Вверх / RoundingMode.Up. Округление к большему по модулю.
"RD=HDN" "ОК=ПВН" Аналогичен РежимОкругления.ПоловинаВниз / RoundingMode.HalfDown. Половинное округление к меньшему по модулю.
"RD=HUP" "ОК=ПВВ" Аналогичен РежимОкругления.ПоловинаВверх / RoundingMode.HalfUp. Половинное округление к меньшему по модулю.

Если специальный флаг, задающий режим округления, не указан — режимом округления является РежимОкругления.ПоловинаВверх.

Суффикс

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

Примеры:

'$' -> в итоговой строке суффикс будет выглядеть, как "$"
'''$''' -> в итоговой строке суффикс будет выглядеть, как "'$'"

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

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

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

Они заменяют форматирующую часть строки и упрощают создание форматных строк.

Англоязычное название стандартного формата Русскоязычное название стандартного формата Описание формата
Money Деньги Именованный формат соответствует форматной строке "_.2"
RadixXX ОснованиеXX Именованный формат позволяет переводить числа в другие системы счисления. Данный стандартный именованный формат применим только к целым числам. Перевод доступен в системы счисления от 2 до 36. Целая часть не разбивается на группы. Ширина строки - минимально возможная для вывода числа в выбранной системе счисления.
Percent Процент Число домножается на 100 и выводится в соответствии с форматной строкой "_.2'%'"

Примеры использования стандартных именованных форматов:

Число Пример применения стандартного формата в форматной строке(RU) Пример применения стандартного формата в форматной строке (EN) Вывод
123123.123 "Деньги'$'" "Money'$' “123 123,12$”
123 "Основание5" "Radix5" “443”
0.234 "Процент" "Percent" “23,4%”

Исключения

ИсключениеНедопустимыйФормат - если введена некорректная форматная строка.

ИсключениеНедопустимыйАргумент - если в другую систему счисления переводится нецелое число или введена некорректная система счисления для перевода в нее числа.

Примеры

Число Форматная строка (EN) Форматная строка (RU) Разбор форматной строки Результат
1236.367 "8.2" "8.2" " - начало форматной строки; 8 - количество символов в итоговом выводе(ширина); .2 - количество цифр в дробной части; " - конец форматной строки ” 1236,37”
1236.367 "5.2" "5.2" " - начало форматной строки; 5 - количество символов в итоговом выводе(ширина). В данном примере ширины не хватает, чтобы записать число. Она будет динамически расширена; .2 - количество цифр в дробной части; " - конец форматной строки “1236,37”
1236.367 ".2;DF=." ".2;РД=." " - начало форматной строки; .2 - количество цифр в дробной части; РД=. - специальный флаг обозначающий ввод пользовательского разделителя между дробной и целой частью - в данном случае задан “.” (точкой); " - конец форматной строки “1 236.37”
1236.367 "_.2;D G=,;DF=." "_.2;РГ=,;РД=." " - начало форматной строки; _ - флаг, обозначающий группировку целой части по 3 цифры, начиная с младшего разряда; .2 - количество цифр в дробной части; РГ=, - специальный флаг обозначающий ввод пользовательского разделителя между группами в целой части - в данном случае задан “,” (запятой); РД=. - специальный флаг обозначающий ввод пользовательского разделителя между дробной и целой частью - в данном случае задан “.” (точкой); " - конец форматной строки “1,236.37”
1236.367 "_.2" "_.2" " - начало форматной строки; _ - флаг, обозначающий группировку целой части по 3 цифры, начиная с младшего разряда; .2 - количество цифр в дробной части; " - конец форматной строки “1 236,37”
1234567 "0_11;DG=_" "0_11;РГ=_" " - начало форматной строки; 0 - флаг, обозначающий заполнение пустых мест в строке нулями; _ - флаг, обозначающий группировку целой части по 3 цифры, начиная с младшего разряда; 11 - количество цифр в итоговом выводе(ширина); РГ=_ - специальный флаг обозначающий ввод пользовательского разделителя между группами в целой части - в данном случае задан “_” (нижним подчеркиванием); " - конец форматной строки “001_234_567”
1234567 "011" "011" " - начало форматной строки; 0 - флаг, обозначающий заполнение пустых мест в строке нулями; 11 - количество символов в итоговом выводе(ширина); " - конец форматной строки “00001234567”
1234567.123 "+_.0;DG=+" "+_.0;РГ=+" " - начало форматной строки; + - флаг, обозначающий вывод положительных чисел со знаком “+”; _ - флаг, обозначающий группировку целой части по 3 цифры, начиная с младшего разряда; .0 - количество цифр в дробной части (в данном случае показывает, что будет выводиться целое число); РГ=+ - специальный флаг обозначающий ввод пользовательского разделителя между группами в целой части - в данном случае задан “+” (знаком плюс); " - конец форматной строки “+1+234+567”
123456.123 "_11.2;DG=,;DF=." "_11.2;РГ=,;РД=." " - начало форматной строки; _ - флаг, обозначающий группировку целой части по 3 цифры, начиная с младшего разряда; 11 - количество символов в итоговом выводе(ширина); .2 - количество цифр в дробной части; РГ=, - специальный флаг обозначающий ввод пользовательского разделителя между группами в целой части - в данном случае задан “,” (запятой); РД=. - специальный флаг обозначающий ввод пользовательского разделителя между дробной и целой частью - в данном случае задан “.” (точкой); " - конец форматной строки ” 123,456.12”
1236.367 "'val='_.2;DG=,;DF=.'$'" "'val='_.2;РГ=,;РД=.'$'" " - начало форматной строки; ‘ - начало префикса; val= - префикс; ' - конец префикса; _ - флаг, обозначающий группировку целой части по 3 цифры, начиная с младшего разряда; .2 - количество цифр в дробной части; РГ=, - специальный флаг обозначающий ввод пользовательского разделителя между группами в целой части - в данном случае задан “,” (запятой); РД=. - специальный флаг обозначающий ввод пользовательского разделителя между дробной и целой частью - в данном случае задан “.” (точкой); ' - начало суффикса; $ - суффикс; ' - конец суффикса; " - конец форматной строки “val=1,236.37$”
123.123 "-7.2'$'" "-7.2'$'" "- начало форматной строки; - - флаг, обозначающий что свободное место будет заполнено пробелами справа; 7 - количество символов в итоговом выводе(ширина); .2 - количество цифр в дробной части; ' - начало суффикса; $ - суффикс; ' - конец суффикса; " - конец форматной строки “123,12 $”
-123123.321 "(.2" "(.2" " - начало форматной строки; ( - флаг, обозначающий что отрицательное число будет заключено в скобки, и его значение будет взято по модулю; .2 - количество цифр в дробной части; " - конец форматной строки “(123123,32)”
1236.367 "'val='_.2;DG=,;DF=.;RD=DN'$'" "'val='_.2;РГ=,;РД=.;ОК=ВН'$'" " - начало форматной строки; ' - начало префикса; val= - префикс; ' - конец префикса; _ - флаг, обозначающий группировку целой части по 3 цифры, начиная с младшего разряда; .2 - количество цифр в дробной части; РГ=, - специальный флаг обозначающий ввод пользовательского разделителя между группами в целой части - в данном случае задан “,” (запятой); РД=. - специальный флаг обозначающий ввод пользовательского разделителя между дробной и целой частью - в данном случае задан “.” (точкой); ОК=ВН - специальный флаг со значением округления к меньшему по модулю; ' - начало суффикса; $ - суффикс; ' - конец суффикса; " - конец форматной строки “val=1,236.36$”

ЦелаяЧасть

ЦелаяЧасть(): Число

Возвращает целую часть числа.


Список унаследованных методов

Объект

Сравнимое