题目连接:
P5706 【深基2.例8】再分肥宅水 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
我提交的:
1 #include
2 #include
3 using namespace std;
4 int main(){
5 float a;
6 int b;
7 cin >> a >> b;
8
9 cout << setprecision(3) << a / b << endl;
10 cout << b * 2 << endl;
11 }
然而,只有一个AC,思考良久,不知为何而错。无奈看了看题解,发现人家比我多了一个"fixed"。那这个"fixed"到底是什么呢?
网上寻找了一圈,看见人家说:“如果一个数字太大,无法使用 setprecision 指定的有效数位数来打印,则许多系统会以科学表示法的方式打印。”
经过尝试后,发现果真如此:
所以应该加上fixed来控制位数。
那么,为什么setprecision不能这样输出呢?我又找了一圈,我发现我对setprecision的理解完全错了。
我过去曾认为:setprecision就是传统意义上,按照我们人脑控制的小数点位数。结果好像跟setw一样的效果,都是控制总有效位数?
现在,问题来到了setw和setprecision的区别:
setw(n): 右对齐,不够位数左边加空格,可以用setfill()来控制左边填充的东西
setprecision(n): 左对齐,不够位数不填充,对于小数点后的0会自动省略。
double a = 123.321;
double b = 32.21;
//cin >> a >> b;
double num = a / b;
cout << "结果:" << endl;
cout << fixed << setw(6) << num << endl; //看看是不是对setw有效
cout << setprecision(6) << num << endl;
cout << num << endl; //看看是不是对下面也有效
cout << setprecision(2) << num << endl;
cout << num << endl; //确实有效
cout << setprecision(1) << num << endl;
cout.setf(ios::fixed); //加上这一句也可以
结果:
3.828656
3.828656
3.828656
3.83
3.83
3.8
D:\C++程序\try1\Debug\try1.exe (进程 63548)已退出,代码为 0。
要在调试停止时自动关闭控制台,请启用“工具”->“选项”->“调试”->“调试停止时自动关闭控制台”。
按任意键关闭此窗口. . .
结论:加上fixed后,经过尝试,setpricision可以控制小数位数,但是setw却不行。
总结:
手机扫一扫
移动阅读更方便
你可能感兴趣的文章