困惑很久了!!!!!求大神解决

qq_33334350 2016-01-18 02:37:19
怎么让计算结果保留4位有效数字?不是那种通过setprecision(n)函数来控制的,是那种结果本身已经保留,正常输出就行。
像我这个处理方法不是太好,不能输出.0000这个种情况,而且如果area是个很大的数时就会溢出。。
#include <iostream>
#include<cmath>
using namespace std;

int main()
{
double a,b,c;
cout<<"输入三角形的边长";
cin>>a>>b>>c;
if(a+b>c&&b+c>a&&a+c>b)
{
double l,area;

l=(a+b+c)/2;
area=int((sqrt(l*(l-a)*(l-b)*(l-c)))*10000+0.5);
area=area/10000;
cout<<area;

}
else

cout << "Hello world!" << endl;
return 0;
}
...全文
152 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
赵4老师 2016-01-22
  • 打赏
  • 举报
回复
引用 5 楼 qq_33334350 的回复:
大牛太厉害了,代码有点难呀,看不太懂,我自己再好好琢磨琢磨。我还有一个问题,编译器默认输出6位有效数字,怎么让他输出一个大数呢?求10!编译器最后用科学计数法表示的
printf("%.15lg",10.0*9*8*7*6*5*4*3*2);
忘世麒麟 2016-01-19
  • 打赏
  • 举报
回复
百度sprintf 。
paschen 版主 2016-01-19
  • 打赏
  • 举报
回复
引用 5 楼 qq_33334350 的回复:
大牛太厉害了,代码有点难呀,看不太懂,我自己再好好琢磨琢磨。我还有一个问题,编译器默认输出6位有效数字,怎么让他输出一个大数呢?求10!编译器最后用科学计数法表示的
cout版: cout <<fixed <<f <<endl ; //定点小数 cout <<scientific <<f <<endl ; //科学技术法
qq_33334350 2016-01-19
  • 打赏
  • 举报
回复
大牛太厉害了,代码有点难呀,看不太懂,我自己再好好琢磨琢磨。我还有一个问题,编译器默认输出6位有效数字,怎么让他输出一个大数呢?求10!编译器最后用科学计数法表示的
赵4老师 2016-01-19
  • 打赏
  • 举报
回复
小数点后保留4位数字 和 保留4位有效数字 不是一回事!
fly_dragon_fly 2016-01-18
  • 打赏
  • 举报
回复
是小数点后4位吗
赵4老师 2016-01-18
  • 打赏
  • 举报
回复
paschen 版主 2016-01-18
  • 打赏
  • 举报
回复
如果怕溢出可以这样:

double round1(double d,unsigned p = 0) //精确到小数点后p位
{
	if(d==0)
		return 0;
	double n=1;
	for(;p>0;p--)
		n*=10;
	if(d>0.0)
		if(d-(__int64)(d*n)/n>=5)
			return (__int64)(d*n+0.5) / n;
		else
			return (__int64)(d*n+0.5000001) / n;
	else
		if(d-(__int64)(d*n)/n>=5)
			return (__int64)(d*n-0.5) / n;
		else
			return (__int64)(d*n-0.5000001) / n;
}
再不然就先把浮点数转成字符串,处理后再转回来,不过效率比上面方法低

double round2(double d,unsigned p = 0)
{
	if(d==0)
		return 0;
	double n=0.01;
	for(unsigned tmp=p;tmp>0;tmp--)
		n/=10;
	if(d>0)
		d+=n;
	else
		d-=n;
	//先转成字符串
	char chs[10],data[200];
	sprintf(chs,"%%.%uf",p);
	sprintf(data,chs,d);
	//再转成double
	return atof(data);
}

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧