Как заставить C ++ cout не использовать научную нотацию - PullRequest
54 голосов
/ 06 марта 2011
double x = 1500;
for(int k = 0; k<10 ; k++){
    double t = 0;
    for(int i=0; i<12; i++){
        t += x * 0.0675;
        x += x * 0.0675;
    }
    cout<<"Bas ana: "<<x<<"\tSon faiz: "<<t<<"\tSon ana: "<<x+t<<endl;      
}

это выход

Бас Ана: 3284,78 Сын Фазы: 1784,78 Сын Ана: 5069,55

Бас Ана: 7193,17 Сын Фаиз: 3908,4 Сон Ана: 11101,6

Бас Ана: 15752 Сын Фаза: 8558,8 Сын Ана: 24310,8

Бас Ана: 34494,5 Сын Фаз: 18742,5 Сын Ана: 53237

Бас Ана: 75537,8 Сын Фаза: 41043,3 Сон Ана: 116581

Бас Ана: 165417 Сын Фаза: 89878,7 Сын Ана: 255295

Бас Ана: 362238 Сын Фаза: 196821 Сын Ана: 559059

Бас Ана: 793246 Сын Фаиз: 431009 Сын Ана: 1.22426e + 006

Бас Ана: 1.73709e + 006 Сын фаиз: 943845 Сын Ана: 2.68094e + 006

Ба Ана: 3.80397e + 006 Сын фаиз: 2.06688e + 006 Сын ана: 5.87085e + 006

Я хочу, чтобы цифры показывались с точными номерами, а не с научными.Как я могу это сделать?

Ответы [ 5 ]

75 голосов
/ 06 марта 2011

Использование std::fixed потоковый манипулятор:

cout<<fixed<<"Bas ana: "<<x<<"\tSon faiz: "<<t<<"\tSon ana: "<<x+t<<endl;
20 голосов
/ 06 марта 2011

Как уже упоминалось выше, вы можете использовать std :: fixed для решения вашей проблемы, например:

cout << fixed;
cout << "Bas ana: " << x << "\tSon faiz: " << t << "\tSon ana: " << x+t <<endl;

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

cout << scientific;

но это может стать утомительным, если ваш код усложняется.

Вот почему Boost сделал State State Saver , который автоматически возвращает используемый вами поток ввода-вывода в состояние, в котором он находился до вызова вашей функции. Вы можете использовать это так:

#include <boost/io/ios_state.hpp> // you need to download these headers first

{
    boost::io::ios_flags_saver  ifs( os );

    cout << ios::fixed;
    cout<<"Bas ana: "<<x<<"\tSon faiz: "<<t<<"\tSon ana: "<<x+t<<endl;

} // at this bracket, when ifs goes "out of scope", your stream is reset

Дополнительную информацию о сохранении состояния потока ввода-вывода Boost можно найти в официальных документах .

Вы можете также воспользоваться библиотекой Boost Format , которая также может упростить вывод, особенно если вам приходится иметь дело с интернационализацией. Однако это не поможет вам в решении этой конкретной проблемы.

2 голосов
/ 27 ноября 2018

кодирует следующий синтаксис:

std::cout << std::fixed << std::setprecision(n);

, где (n) - число десятичной точностиЭто должно это исправить.

2 голосов
/ 06 марта 2011

Вы можете использовать флаги формата

Дополнительная информация: http://www.cplusplus.com/reference/iostream/ios_base/fmtflags/

1 голос
/ 06 марта 2011

Существует целый набор операторов форматирования, которые вы получаете с iostream. Вот учебник , с которого можно начать.

...