Как я могу добавить нули дополнения к числу, записанному в ofstream? - PullRequest
2 голосов
/ 24 января 2012

Я пытаюсь записать числовые значения в текстовый файл, выровненный по столбцам.Мой код выглядит так:

ofstream file;
file.open("try.txt", ios::app);
file << num << "\t" << max << "\t" << mean << "\t << a << "\n";

Это работает, за исключением того, что значения не имеют одинаковое количество цифр, они не выравниваются.То, что я хотел бы, является следующим:

1.234567  ->  1.234
1.234     ->  1.234
1.2       ->  1.200

Ответы [ 4 ]

5 голосов
/ 24 января 2012

Это зависит от того, какой формат вы хотите. Для фиксированного десятичного знака, что-то вроде:

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 ...

(или любой другой ширины и точности).

Если вы вообще выполняете какую-либо работу с плавающей запятой, вам, вероятно, следует иметь такой манипулятор у тебя забрал обвес (хотя во многих случаях это будет более целесообразно использовать логический манипулятор, названный в честь логического значение форматируемых данных, например, Степень, расстояния и т. д.).

ИМХО, стоит также расширить манипуляторы, чтобы они форматировать состояние и восстанавливать его в конце полного выражения. (Все мои манипуляторы происходят от базового класса, который обрабатывает это.)

4 голосов
/ 24 января 2012

Взгляните на std::fixed, std::setw() и std::setprecision().

2 голосов
/ 24 января 2012

Метод такой же, как при использовании cout.См. этот ответ .

2 голосов
/ 24 января 2012

Сначала вам нужно изменить точность.

Вот хороший пример здесь .

...