Подтвердить что ты не робот

Как сделать С++ cout не использовать научную нотацию

double x = 1500;
for(int k =0; k<10 ; k++){
    double t =0;
    for(int i=0; i<12; i++){
        t += (double) x * 0.0675;
        x += (double) x * 0.0675;
    }
    cout<<"Bas ana: "<<x<<"\tSon faiz: "<<t<<"\tSon ana: "<<x+t<<endl;      
}

этот вывод

Базовая история: 3284.78 Сын faiz: 1784.78 Сын ana: 5069.55

Bas ana: 7193.17 Son faiz: 3908.4 Son ana: 11101.6

Базовая история: 15752 Сын faiz: 8558.8 Сын ana: 24310.8

Bas ana: 34494.5 Сын faiz: 18742.5 Сын ana: 53237

Базовая история: 75537.8 Сын faiz: 41043.3 Сын ana: 116581

Bas ana: 165417 Son faiz: 89878.7 Son ana: 255295

Базовая история: 362238 Сын faiz: 196821 Son ana: 559059

Bas ana: 793246 Son faiz: 431009 Son ana: 1.22426e + 006

Bas ana: 1.73709e + 006 Son faiz: 943845 Son ana: 2.68094e + 006

Bas ana: 3.80397e + 006 Son faiz: 2.06688e + 006 Son ana: 5.87085e + 006

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

4b9b3361

Ответ 1

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

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

Ответ 2

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

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

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

cout << scientific;

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

Вот почему Boost сделал Сохранение состояния потока ввода/вывода, который автоматически возвращает поток ввода-вывода, который вы используете, в состояние, которое было до вызова функции. Вы можете использовать его следующим образом:

#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 I/O Stream State Saver в официальных документах можно найти.

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

Ответ 4

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