Эти манипуляторы изменяют также заданное для потока по умолчанию значение точности. После применения манипуляторов scientific, fixed или hexfloat значение точности контролирует количество цифр после десятичной точки. По умолчанию точность определяет количество цифр до и после десятичной точки. Манипуляторы fixed и scientific позволяют выводить числа, выстроенные в столбцы, с десятичной точкой в фиксированной позиции относительно дробной части:

cout << "default format: " << 100 * sqrt(2.0) << '\n'

     << "scientific: " << scientific << 100 * sqrt(2.0) << '\n'

     << "fixed decimal: " << fixed << 100 * sqrt(2.0) << '\n'

     << "hexadecimal: " << hexfloat << 100 * sqrt(2.0) << '\n'

     << "use defaults: " << defaultfloat << 100 * sqrt(2.0)

     << "\n\n";

Получается следующий вывод:

default format: 141.421

scientific: 1.414214e+002

fixed decimal: 141.421356

hexadecimal: 0x1.1ad7bcp+7

use defaults: 141.421

По умолчанию шестнадцатеричные цифры и символ е, используемый в экспоненциальном представлении, выводятся в нижнем регистре. Манипулятор uppercase позволяет выводить эти значения в верхнем регистре.

Вывод десятичной точки

По умолчанию, когда дробная часть значения с плавающей точкой равна 0, десятичная точка не отображается. Манипулятор showpoint требует отображать десятичную точку всегда:

cout << 10.0 << endl;        // выводит 10

cout << showpoint << 10.0    // выводит 10.0000

     << noshowpoint << endl; // возвращает стандартный формат

                             // десятичной точки

Манипулятор noshowpoint восстанавливает стандартное поведение. У вывода следующих выражений будет стандартное поведение, подразумевающее отсутствие десятичной точки, если дробная часть значения с плавающей точкой отсутствует.

Дополнение вывода

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

• Манипулятор setw задает минимальное пространство для следующего числового или строкового значения.

• Манипулятор left выравнивает текст по левому краю вывода.

• Манипулятор right выравнивает текст по правому краю (принято по умолчанию).

• Манипулятор internal контролирует положение знака отрицательных значений. Выравнивает знак по левому краю, а значение по правому, дополняя пространство между ними пробелами.

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

Манипуляторы setw и endl не изменяют внутреннее состояние потока вывода. Они определяют только последующий вывод.

Эти манипуляторы иллюстрирует следующая программа:

int i = -16;

double d = 3.14159;

// дополняет первый столбец, обеспечивая минимум 12 позиций вывода

cout << "i: " << setw(12) << i << "next col" << '\n'

     << "d: " << setw(12) << d << "next col" << '\n';

// дополняет первый столбец и выравнивает все столбцы по левому краю

cout << left

     << "i: " << setw(12) << i << "next col" << '\n'

     << "d: " << setw(12) << d << "next col" << '\n'

     << right; // восстанавливает стандартное выравнивание

// дополняет первый столбец и выравнивают все столбцы по правому краю

cout << right

     << "i: " << setw(12) << i << "next col" << '\n'

     << "d: " << setw(12) << d << "next col" << '\n';

// дополняет первый столбец и помещает дополнение в поле

cout << internal

     << "i: " << setw(12) << i << "next col" << '\n'

     << "d: " << setw(12) << d << "next col" << '\n';

// дополняет первый столбец, используя символ # как заполнитель

cout << setfill('#')

Перейти на страницу:

Похожие книги