Пошаговое руководство по C++ cout.setf(ios::fixed); и cout.precision();

/* Problem 38 */
        #include <iostream>
        using namespace std;
        class abc {
        double n;
          public:
        abc() { n = 67.5; cout << "1\n"; }
        abc(double num) { set(num); cout << "2\n"; }
        double get() const { cout<<"3\n"; return n; }
        virtual void set(double num) {
            if (num < 10)
            n = 10;
            else if (num > 100)
            n = 100;
            else
            n = num;
            cout << "4\n";
        }
        };
        class def: public abc {
        double m;
          public:
        def() { m = 6.2; cout << "5\n"; }
        def(double num1, double num2): abc(num1) {
            set(num2 - abc::get()); cout << "6\n"; }
        double get() const {
            cout << "7\n"; return m + abc::get(); }
        void set(double num) {
            if (num < 10 || 100 < num)
            m = num;
            else
            m = 55;
            cout << "8\n";
        }
        };
        void do_it(abc &var, double num)
        {   cout << var.get() << '\n';
        var.set(num);
        cout << var.get() << '\n';
        }
        int main()
        {   abc x(45);
        def y(2, 340);
        cout.setf(ios::fixed);
        cout.precision(3);
        do_it(x, 200);
        do_it(y, 253);
        cout << x.get() << '\n';
        cout << y.get() << '\n';
        return 0;
        }

С приведенным выше кодом я просто хотел знать, что на самом деле будут делать две строки ниже в приведенном выше коде.

cout.setf(ios::fixed); cout.precision(3);

Пожалуйста, не просто дайте мне ответ, некоторые объяснения были бы очень признательны, потому что я делаю пошаговое руководство, чтобы подготовиться к завтрашнему выпускному экзамену.

Я искал, и в каком-то источнике говорится, что это установка флагов, но на самом деле я не понимаю, в чем заключается его концепция и как это работает.


person Ali    schedule 16.04.2012    source источник
comment
std::ios_base::setf и std::ios_base::precision. На обеих страницах есть объяснения того, что делают функции   -  person Praetorian    schedule 17.04.2012
comment
Спасибо! Я действительно не хочу испортить процесс прохождения программы, но этот setf [Set flag] относится ко всем выводам или к тому, что будет позже?   -  person Ali    schedule 17.04.2012
comment
Я не понимаю, что вы имеете в виду под всеми выводами или чем-то еще, что будет вырезано позже. Вы применяете флаги форматирования к потоку std::cout, вызывая setf(), поэтому это влияет на способ cout printfs при будущих вызовах.   -  person Praetorian    schedule 17.04.2012
comment
@Prætorian Извините, это то, что я имел в виду, я просто хотел знать, будет ли он применять что-либо, что будет cout позже, или всю программу. Спасибо!   -  person Ali    schedule 17.04.2012


Ответы (4)


cout.setf(ios::fixed)

заставляет cout print печатать с фиксированным числом десятичных знаков и

cout.precision(3)

устанавливает это число равным трем.

Например, если вы получили

double f = 2.5;

тогда

cout << f;

будет печатать

2.500
person bjhend    schedule 16.04.2012
comment
Согласно документации cout.unsetf(ios::fixed) должно помочь. - person bjhend; 10.02.2015

Отличная документация по форматированию выходных данных: форматирование выходных данных.

Это всегда полезно, когда вы пытаетесь создать пользовательский интерфейс командной строки.

person Erwald    schedule 16.04.2012

#include<iostream>

using namespace std;

int main(){
    float large = 2000000000;
    cout << large;
    return 0;
}

Вывод будет в экспоненциальном представлении следующим образом:

2e+009

Чтобы получить значение как есть, вы должны использовать cout.setf(ios::fixed)

#include<iostream>

    using namespace std;

    int main(){
        cout.setf(ios::fixed);
        float large = 2000000000;
        cout << large;
        return 0;
    }

Вывод будет таким же, как и с точностью по умолчанию, которая равна 6 для числа с плавающей запятой.

2000000000.000000

Вы можете установить точность в приведенном выше коде как:

cout.precision(7);

.....

person Community    schedule 12.06.2017

Это похоже на включение библиотеки манипуляций:
include :

<iomanip>

А затем с помощью следующих функций

cout << fixed << showpoint;
cout << setprecision(3);
person TheEngineer    schedule 12.09.2016