Эти манипуляторы изменяют также заданное для потока по умолчанию значение точности. После применения манипуляторов 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; //
cout << showpoint << 10.0 //
<< noshowpoint << endl; //
//
Манипулятор noshowpoint
восстанавливает стандартное поведение. У вывода следующих выражений будет стандартное поведение, подразумевающее отсутствие десятичной точки, если дробная часть значения с плавающей точкой отсутствует.
При выводе данных в столбцах зачастую необходим довольно подробный контроль над форматированием данных. Библиотека предоставляет несколько манипуляторов, обеспечивающих контроль, который может понадобиться.
• Манипулятор setw
задает минимальное пространство для
• Манипулятор left
выравнивает текст по левому краю вывода.
• Манипулятор right
выравнивает текст по правому краю (принято по умолчанию).
• Манипулятор internal
контролирует положение знака отрицательных значений. Выравнивает знак по левому краю, а значение по правому, дополняя пространство между ними пробелами.
• Манипулятор setfill
позволяет задать альтернативный символ для дополнения вывода. По умолчанию принят пробел.
setw
и endl
не изменяют внутреннее состояние потока вывода. Они определяют только
Эти манипуляторы иллюстрирует следующая программа:
int i = -16;
double d = 3.14159;
//
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('#')