По умолчанию выводимое значение имеет такую ширину поля, которая необходима для отображения выводимого значения. Например, для вывода числа 234.5 ширина поля будет равна 4.
Метод width позволяет установить новую ширину поля, равную его параметру. Некоторые компиляторы требуют, чтобы ширина поля устанавливалась перед выводом каждого значения, иначе будет использована ширина по умолчанию. Если количество выводимых символов превышает установленную ширину поля, то значение все равно будет выведено, а установленная ширина – проигнорирована.
Если выводимое значение содержит меньше символов, чем заданная ширина поля, то недостающие позиции будут заполнены текущим символом заполнения, задаваемым методом fill (по умолчанию – пробел).
Метод precision устанавливает количество цифр, отображаемых после десятичной точки в вещественных числах (по умолчанию - 6). Некоторые компиляторы требуют установки точности перед выводом каждого значения, иначе будет использована точность по умолчанию.
Пример использования перечисленных методов:
#include <iostream>
using namespace std;
void main()
{
cout.setf(ios::fixed); // фиксированный формат вывода вещ. чисел
cout << 123 << ' ' << 123.45 << endl;
cout.fill('-'); // символ-заполнитель - тире
cout.width(10); // ширина поля вывода - 10 символов
cout << 123 << ' ';
cout.width(10);
cout.precision(1); // 1 цифра после точки
cout << 123.45 << endl;
cout.width(10); // ширина поля вывода - 10 символов
cout << left << 123; // выравниваем по левому краю поля
}
В результате выполнения программы получим:
123 123.450000
-------123 -----123.5
123-------
Первая строка – без форматирования, вторая – с шириной поля 10 символов с заполнением знаками '-' и с точностью в 1 знак после запятой, третья – с шириной поля 10 символов и выравниванием по левому краю поля.