Числовое форматирование. Оформление

   
На этом шаге мы рассмотрим определение различных способов представления чисел.

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

Таблица 1. Функции фацета numpunct

ВыражениеОписание
np.decimal_point()Возвращает символ, используемый в качестве десятичной точки
np.thousands_sep()Возвращает символ разделения групп разрядов
np.grouping()Возвращает объект string с описанием позиций разделителей
np.truename()Возвращает текстовое представление значения true
np.falsename()Возвращает текстовое представление значения false

   
В аргументе шаблона numpunct передается символьный тип charT. Символы, возвращаемые функциями decimal_point() и
thousand_sep(), относятся к этому типу, а функции truename() и falsename() возвращают basic_string<charT>.
Обязательна поддержка двух специализаций numpunct<char> и numpunct<wchar_t>.

   
Поскольку числа из множества цифр плохо читаются без промежуточных разделителей, стандартные фацеты числового форматирования и
лексического разбора позволяют разделять группы разрядов. Чаще всего цифры, представляющие целое число, группируются по триплетам. Например,
в США один миллион записывается так:

   1,000,000

   
К сожалению, такое представление используется не везде. Например, в Германии для разделения группы разрядов используется точка, поэтому немец
запишет это же число в несколько ином виде:

  1.000.000

   
Символ-разделитель определяется функцией thousands_sep(). Но и этого недостаточно, поскольку в некоторых странах встречаются другие
правила разделения разрядов. Например, в Непале один миллион записывается в виде:

  10.00.000

   
В этом случае разные группы содержат разное количество цифр. В таких случаях может пригодиться строка, возвращаемая функцией grouping().
Цифра в позиции с индексом i определяет количество разрядов в i-й группе, отсчет ведется от нуля с крайней правой группы. Если количество
символов в строке меньше количества групп, размер последней заданной группы применяется повторно. Значение numeric_limits<char>::max()
определяет группу неограниченного размера, а при полном отсутствии групп используется пустая строка. В таблице 2 приведены примеры разного
форматирования одного числа.

Таблица 2. Примеры разделения разрядов в одном миллионе

СтрокаРезультат
{ 0 } или "" (используется по умолчанию)1000000
{ 3, 0 } или {\3}1,000,000
{ 3, 2, 3, 0 } или "\3\2\3"10,00,000
{ 2, CHAR_MAX, 0 }10000,00

   
Обратите внимание, что обычные цифры в данном случае практически бесполезны. Например, строка "2" для кодировки ASCII определяет
группы в 50 цифр, потому что символу 2 в кодировке ASCII соответствует целочисленный код 50.

   
На следующем шаге мы рассмотрим форматирование.



Вы можете оставить комментарий, или Трекбэк с вашего сайта.

Оставить комментарий