如何使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::fixed
stream操纵器:
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获得的格式化操作符的集合。 这里有一个教程 ,让你开始。