ios::scientific和ios::fixed

皇甫波峻
2023-12-01

有人问我3141.5926打印的问题,用ios::scientific和ios::fixed打印出来的东西不得其解,也搞不明白规律。查了C++手册,也没说明白。写程序跑了一下,终于搞清楚了。写在这希望对大家有帮助。

 

这些标志在std::cout.flags中,ios::scientific和ios::fixed是两个标志位,所以有四种情况:
00:均不置位,此时setprecision设置的精度为总位数,当整数部分位数大于setprecision的值时,使用科学计数法
01:ios::scientific置位 科学计数法,整数为1位,小数位数为setprecision设置的值
10:ios::fixed置位 小数位数为setprecision设置的值
11:ios::scientific和ios::fixed都置位 同00,即两个标志都不生效
00:
3e+003
3.1e+003
3.14e+003
3142
3141.6
3141.59
3141.593
3141.5926

01(ios::scientific)
3e+003
3.1e+003
3.14e+003
3.142e+003
3.1416e+003
3.14159e+003
3.141593e+003
3.1415926e+003
3.14159260e+003

10:(ios::fixed)
3141.6
3141.59
3141.593
3141.5926
3141.59260
3141.592600
3141.5926000
3141.59260000

11(ios::scientific并且ios::fixed)
3e+003
3.1e+003
3.14e+003
3142
3141.6
3141.59
3141.593
3141.5926

ff = std::cout.flags();
itoa(ff,s,2);
printf("%s\n",s);
这三条语句可以用二进制打印出flags,前两个二进制位为这两个标志

 类似资料: