...保留此平均值小数点后一位,对小数点后第二位小数四舍五入
发布网友
发布时间:2023-12-11 21:33
我来回答
共2个回答
热心网友
时间:2024-08-01 22:08
单精度实数在内存中占32bit 有效数字为6~7位,
双精度实数占内存单元为64bit 有效数字为15~16位。
所以双精度数不是小数点后有两个小数的数。
d*=10;
d+=0.5;
d/=10;
这三条语句是对小数点后第二位小数四舍五入。
例如d=1.26;
d*=10; // 12.6
d+=0.5; //13.1
d/=10; //1.31
printf("%.1lf\n",d); // 1.3
很明显,若小数点后第二位小数大于等于5,就会往前一位进位。就是四舍五入了。其实
d+=0.05;
就能实现了。
热心网友
时间:2024-08-01 22:13
/*读入三个双精度数,求它们的平均值并保留此平均值小数点后一位数,对小数点后第二位数进行四舍五入,最后输出结果。*/
#include
#include
void main()
{
double a,b,c,d,e;
int g,h1,h2;
char f[20];
printf("请输入三个双精型\n");
scanf("%lf %lf %lf",&a,&b,&c);
d=(a+b+c)/3;
printf("原来未按要求执行返回的双精型\n");
printf("%lf\n",d);
e=d-(int)d; /*求小数部分*/
sprintf(f,"%f",e);/* 将小数转换成字符串*/
printf("转换成字符串之后的小数部分\n");
printf("%s\n",f);/*这一步是用来检测字符串是怎样的*/
g=strlen(f); /*计算字符串长度*/
printf("字符串长度:%d\n",g);
if(g>=3)
{
printf("处理好之后的平均值是\n");
h2=(int)f[3]; /* f[3]是字符型数据,强行取整之后,编程ASC值*/
if(h2>52) /*判断ASC码 4*/
{
h2=(int)f[2];
if(h2>56)
{
h2=48; /*进位直接写0的ASC码*/
h1=(int)d;
h1=h1+1;
}
else
{
h2=h2+1;
h1=(int)d;
}
/*转换成字符串之后一个个字符输出,好笨的办法,求大神精辟*/
printf("%d",h1);/*这里是取双精型的整,不用输出字符*/
printf("%c",f[1]);
printf("%c",h2); /*h2是取ASC码的值,所以要输出字符型数据*/
}
else{
printf("%d",h1=(int)d);
printf("%c",f[1]);
printf("%c",f[2]);}
printf("\n");
}
else{
printf("处理好之后的平均值是\n");
printf("%g\n",d);
}
}