C/C++控制输出时有时有控制精度的问题,现总结如下(这时C写法更简单些):
1.setprecision(n) 默认设置输出的数字的总位数为n,包含整数和小数部分;
2.setiosflags(ios::fixed) 默认输出6位,必须与setprecision(n)配合使用,用来控制小数位数,不够补0;
3.resetiosflags(ios::fixed) 取消精度的设置。
直接上代码:
#include<iostream>
#include<iomanip> // 精度控制头文件
using namespace std;
int main()
{
const double value=12.3456789;
// C输出方式printf()函数
printf("%lf\n",value); // double输出为 12.3456789:遵循IEEE标准的8字节(64位)的double能表示的有效数字的位数是:15~16
// C++输出方式cout函数
cout<<value<<endl; // 默认以6精度,所以输出为 12.3457
cout<<setprecision(4)<<value<<endl; // 改成4精度,所以输出为12.35
cout<<setprecision(8)<<value<<endl; // 改成8精度,所以输出为12.345679
// C语言控制精度方式:
printf("%.4lf\n",value);
// C++第一种方式:
cout<<fixed<<setprecision(4)<<value<<endl; // 加了fixed意味着是固定点方式显示,所以这里的精度指的是小数位,输出为12.3457
cout<<value<<endl; // fixed和setprecision的作用还在,依然显示12.3457
cout.unsetf(ios::fixed); // 去掉了fixed,所以精度恢复成整个数值的有效位数,显示为12.35
cout<<value<<endl;
cout.precision(6); // 恢复成原来的样子,输出为12.3457
cout<<value<<endl;
// C++第二种方式:
cout<<setiosflags(ios::fixed)<<setprecision(5)<<value<<endl; // 输出为12.34568,小数位数是5位,不够补0
cout<<resetiosflags(ios::fixed); // 取消精度的设置
system("pause");
return 0;
}
原文链接: https://www.cnblogs.com/sooner/archive/2012/04/18/2454765.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/47747
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!