洛谷 P5706 【深基2.例8】再分肥宅水
2024-09-01 05:19:03
题目连接:
P5706 【深基2.例8】再分肥宅水 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
我提交的:
1 #include<iostream>
2 #include<iomanip>
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却不行。
总结:
- 如果cout要控制小数点位数,那么使用setprecision时要加上fixed;
- fixed对setprecision都有效果,对setw没有。
- setw只对下一个输出值有效,而setprecision对后面的输出都有效。
最新文章
- GridView 行单击或双击事件绑定
- Android广播大全
- SQL GUID去除横线,并转换为小写
- ajax的一部分知识
- Java8特性---关于Null
- scrapy在ubuntu上安装总结
- 《JS权威指南学习总结--8.4 作为值的函数》
- 201521123031《java程序设计》第五周学习总结
- linux 运维工程师发展路线
- 白盒测试实践-day02
- Springboot 前后端数据传输 常见误区
- vmware 里MAC 鼠标能移动 无法单击
- iis部署 .net core webapi
- oracle使用索引和不使用索引性能分析
- ie不支持max-height的解决之法
- Idea问题记录
- linux下实现CPU使用率和内存使用率获取方法
- 获取checkbox 组成字符串
- RxJava 详解
- flask 启动