徐不可说:c语言没有系统学过,漏过了几个比较常用的双精度浮点数输出、四舍五入控制函数。以下是c++实现和c实现的对比。
c++中有这三个函数用来处理小数向整数的转换:
2.1 2.6 -2.1 -2.6
floor : 不大于自变量的最大整数 2 2 -3 -3
ceil :不小于自变量的最大整数 3 3 -2 -2
round:四舍五入到最邻近的整数 2 3 -2 -3
但代码中经常要处理小数的四舍五入,例如对37.775进行保留两位小数的四舍五入输出,正确输出应该为37.78这个时候以上三个现成的函数不能够直接达到我们的目的。
我们用以下两种思路来达到我们的目的:
1、
float a=37.775;
a=round(a*100)/100
2、
float a=37.775
a=ceil(a*100+0.5)/100
值得注意的是 使用c++输出时 还需进行小数位数控制。
C语言程序中浮点数类型(%.2lf)编译器默认四舍五入,(最好自行测试一遍,可能不同平台使用的C语言版本不同,语言标准也有区别,一笔糊涂账。)
%lf 双精度浮点型,也就是double型的格式,默认保留6位小数。
如:double a = 1.2; printf("%lf",a); //1.200000。
2、%.2lf 同上,不过限制了,值保留2位小数,可更改2为6、7等,表示6、7位小数。
如:double a = 1.2345; printf("%.2lf",a); //1.23。
3、%.2f 表示单精度浮点型,也就是float型的格式。
如:float a = 1.2731; printf("%.2f",a); //1.27。
另外,float精度是2^23,能保证6位,double的精度是2^52,能保证15位。double精度的确有那么高,但是默认打印位数没有那么多。
x的x次幂
时间限制: 3 Sec 内存限制: 128 MB
题目描述
如果x的x次幂结果为10(参见【图1.png】),你能计算出x的近似值吗?
显然,这个值是介于2和3之间的一个数字。
请把x的值计算到小数后6位(四舍五入),并填写这个小数值。
注意:只填写一个小数,不要写任何多余的符号或说明。
#include<bits/stdc++.h>
using namespace std;
int main()
{
double x=2.0;
while(x<3.0)
{
x=x+0.0000001;//7个小数位的形式递增
if(fabs(pow(x,x)-10.00)<0.000001) //针对浮点数的绝对值 abs->整数
{//printf("%f\n",x);
//printf("%lf\n",x);
printf("%.6lf\n",x);
/*cout.precision(6);
cout<<fixed<<round(x*1000000)/1000000;*/
break;//上诉4种皆可表示6位四舍五入小数
}
}
}
如以8位小数递增,会时间超限。