Это зависит от того, какой формат вы хотите. Для фиксированного десятичного разряда, что-то вроде:
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 ...
(или любую ширину и точность, которые вы хотите).
Если вы вообще работаете с числами с плавающей запятой, вам, вероятно, следует иметь такой манипулятор в своем комплекте взятия (хотя во многих случаях будет более подходящим использовать логический манипулятор, названный в честь логического значения данных, которые он форматирует). , например, градусы, расстояния и т. д.).
ИМХО, стоит также расширить манипуляторы, чтобы они сохраняли состояние форматирования, и восстанавливали его в конце полного выражения. (Все мои манипуляторы происходят от базового класса, который обрабатывает это.)
person
James Kanze
schedule
24.01.2012