Это зависит от того, какой формат вы хотите. Для фиксированного десятичного знака,
что-то вроде:
class FFmt
{
int myWidth;
int myPrecision;
public:
FFmt( int width, int precision )
: myWidth( width )
, myPrecision( precision )
{
}
friend std::ostream& operator<<(
std::ostream& dest,
FFmt const& fmt )
{
dest.setf( std::ios::fixed, std::ios::floatfield );
dest.precision( myPrecision );
dest.width( myWidth );
}
};
должен сделать трюк, так что вы можете написать:
file << nume << '\t' << FFmt( 8, 2 ) << max ...
(или любой другой ширины и точности).
Если вы вообще выполняете какую-либо работу с плавающей запятой, вам, вероятно, следует иметь
такой манипулятор у тебя забрал обвес (хотя во многих случаях это будет
более целесообразно использовать логический манипулятор, названный в честь логического
значение форматируемых данных, например, Степень, расстояния и т. д.).
ИМХО, стоит также расширить манипуляторы, чтобы они
форматировать состояние и восстанавливать его в конце полного выражения.
(Все мои манипуляторы происходят от базового класса, который обрабатывает это.)