本人在練習http://hi.baidu.com/hankcs/item/55c0ca55e8f4ac9208be1770一文中的例二《例2
用控制符控制输出格式》時,發現在使用setiosflags(ios::scientific)后直接用setiosflags(ios::fixed)來輸出小數形式的浮點數時,結果不正確:pi=0x1.9249p+1 。不知道原因是什麽,
#include <iostream> #include <iomanip> //不要忘记包含此头文件 using namespace std; int main() { int a; cout<<"input a:"; cin>>a; cout<<"dec:"<<dec<<a<<endl; //以上进制形式输出整数 cout<<"hex:"<<hex<<a<<endl; //以十六进制形式输出整数a cout<<"oct:"<<setbase(8)<<a<<endl;//以八进制形式输出整数a char *pt="China"; //pt指向字符串”China” cout<<setw(10)<<pt<<endl; //指定域宽为10,输出字符串 cout<<setfill('*')<<setw(10)<<pt<<endl;//指定域宽10,输出字符串,空白处以“*”填充 double pi=22.0/7.0; //计算pi值 cout<<setiosflags(ios::scientific)<<setprecision(8);//按指数形式输出,8位小数 cout<<"pi="<<pi<<endl; //输出pi值 cout<<"pi="<<setprecision(4)<<pi<<endl;//改为4位小数 cout<<"pi="<<setiosflags(ios::fixed)<<pi<<endl;//改为小数形式输出 return 0; }
輸出結果為:
input a:455
dec:455
hex:1c7
oct:707
oct:707
hex:1c7
China
*****China
pi=3.14285714e+000
pi=3.1429e+000
pi=0x1.9249p+1
请按任意键继续. . .
有網友認為“可能是因为 fixed和scientific不是互斥的, 你得把先设置的那个取消掉再设置后一个”。參見:
后將程序修改如下后,正常了:
//C++ 输出格式控制练习 //http://blog.csdn.net/qianfu111/article/details/7020174 #include <iostream> #include <iomanip> //不要忘记包含此头文件 using namespace std; int main() { int a; cout<<"input a:"; cin>>a; cout<<"dec:"<<dec<<a<<endl;//以上进制形式输出整数 hex(cout); cout<<"hex:"<<a<<endl; //cout<<"hex:"<<hex<<a<<endl;//以十六进制形式输出整数a cout<<"oct:"<<setbase(8)<<a<<endl;//以八进制形式输出整数a cout<<"oct:"<<oct<<a<<endl; cout<<"hex:"<<hex<<a<<endl; char *pt="China"; //pt指向字符串”China” cout<<setw(10)<<pt<<endl;//指定域宽为10,输出字符串 cout<<setfill('*')<<setw(10)<<pt<<endl;//指定域宽10,输出字符串,空白处以“*”填充 double pi=22.0/7.0; //计算pi值 cout<<setiosflags(ios::scientific)<<setprecision(8);//按指数形式输出,8位小数 cout<<"按指數形式輸出:"<<endl; cout<<"pi="<<pi<<endl; //输出pi值 cout<<"pi="<<setprecision(4)<<pi<<endl;//改为4位小数 //如果注释掉这行,输出结果将是pi=0x1.9249p+1,而不是pi=3.1429 //大概是因为 fixed和scientific不是互斥的, 你得把先设置的那个取消掉再设置后一个 cout<<resetiosflags(ios::scientific); cout<<"按定點形式輸出:"<<endl; cout<<"pi="<<setiosflags(ios::fixed)<<pi<<endl;//改为小数形式输出 cout<<resetiosflags(ios::fixed); cout<<"原位輸出:"<<endl; cout<<"pi="<<pi<<endl; return 0; }
輸出結果:
input a:455
dec:455
hex:1c7
oct:707
oct:707
hex:1c7
China
*****China
按指數形式輸出:
pi=3.14285714e+000
pi=3.1429e+000
按定點形式輸出:
pi=3.1429
原位輸出:
pi=3.143
请按任意键继续. . .
關於這些操作符,可參考以下解釋:
std::resetiosflags
http://www.cplusplus.com/reference/iostream/manipulators/resetiosflags/
std::setiosflags
http://www.cplusplus.com/reference/iostream/manipulators/setiosflags/
其他資料:
http://blog.csdn.net/shuilan0066/article/details/4034142 小数点输出精度控制问题