关于setiosflags(ios::fixed)和setprecision(n)在实际进行时发现的问题

昨天在做蓝桥杯练习题的时候接触了setiosflags(ios::fixed)和setprecision(n),用来设定小数位数,先把题目打出来吧:

在这里插入图片描述

#include<iostream>
#include<iomanip>
#include<cmath>
using namespace std;
int main()
{
 int r,area_0,digit=0;
 double area,PI=atan(1.0)*4;
 cin>>r;
 area=PI*r*r;                    //计算面积
 area_0=int(area);               //取出整数位
 //cout<<area<<endl<<area_0<<endl;
 while (area_0>0)                //计算整数位数
 {
  digit++;
  area_0/=10;
 }
 //cout<<digit<<endl;
 cout<<setprecision(7+digit)<<area<<endl;
 return 0;
}

第一遍代码我是这么写的,可是发现在输入80的时候,结果会变成一个小数位是6的数,后来发现原来是在输出是他把小数末尾的无效的0舍去了。
使用setprecision(n)可控制输出流显示浮点数的数字个数。C++默认的流输出数值有效位是6。
如果setprecision(n)与setiosflags(ios::fixed)合用,可以控制小数点右边的数字个数。setiosflags(ios::fixed)是用定点方式表示实数。
所以更改一下

#include<iostream>
#include<iomanip>
#include<cmath>
using namespace std;
int main()
{
 int r,area_0,digit=0;
 double area,PI=atan(1.0)*4;
 cin>>r;
 area=PI*r*r;
 cout<<setiosflags(ios::fixed)<<setprecision(7)<<area<<endl;
 return 0;
}

就可以了。

  • 4
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值