如何使C ++ 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; } 

这是输出

Bas ana:3284.78 Son faiz:1784.78 Son ana:5069.55

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

Bas ana:15752 Son faiz:8558.8 Son ana:24310.8

Bas ana:34494.5 Son faiz:18742.5 Son ana:53237

Bas ana:75537.8 Son faiz:41043.3 Son ana:116581

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

Bas ana:362238 Son faiz:196821 Son ana:559059

母语:793246 Son faiz:431009 Son ana:1.22426e + 006

下一个:1.73709e + 006儿子:943845儿子:2.68094e + 006

基本信息:3.80397e + 006儿子:2.06688e + 006儿子:5.87085e + 006

我想要数字显示与确切的数字不科学的数字。 我怎样才能做到这一点?

使用std::fixedstream操纵器:

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

如上所述,您可以使用std :: fixed来解决您的问题,如下所示:

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

但是,在完成此操作后,每次在项目中的任何位置打印一个浮点数或一个双精度数时,该数字仍将以此固定符号打印。 你可以通过使用返回

 cout << scientific; 

但如果你的代码变得更复杂,这可能会变得单调乏味。

这就是为什么Boost创build了I / Ostream状态保存器 ,它会自动将您正在使用的I / Ostream返回到函数调用之前的状态。 你可以像这样使用它:

 #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 

您可以在官方文档中find有关Boost的I / Ostream状态保存程序的更多信息。

您也可能想要查看Boost Format库 ,这也可以使您的输出变得更容易,特别是如果您必须处理国际化。 但是,这对于这个特殊的问题并没有帮助。

您可以使用格式标志

更多信息: http : //www.cplusplus.com/reference/iostream/ios_base/fmtflags/

有一个你用iostream获得的格式化操作符的集合。 这里有一个教程 ,让你开始。