从键盘读入一个实数,对其进行四舍五入处理,要求精确到到小数点后两位。
#include<stdio.h>voidmain(){floatx;inty;printf("请输入一个实数:\n");scanf("%f",&x);y=x*1000;...
#include<stdio.h>
void main()
{
float x;
int y;
printf("请输入一个实数:\n");
scanf("%f",&x);
y=x*1000;
if(y%10<=4)
y=y-y%10;
else
{
y=y+10;
y=y-y%10;
}
printf("该实数,四舍五入保留两位小后是%.2f\n",x);
}
这是找的答案,它的运算过程只用了y,输出的却是x,而且程序运行正确,请问这是为什么。。 展开
void main()
{
float x;
int y;
printf("请输入一个实数:\n");
scanf("%f",&x);
y=x*1000;
if(y%10<=4)
y=y-y%10;
else
{
y=y+10;
y=y-y%10;
}
printf("该实数,四舍五入保留两位小后是%.2f\n",x);
}
这是找的答案,它的运算过程只用了y,输出的却是x,而且程序运行正确,请问这是为什么。。 展开
2个回答
艾普斯
2024-07-18 广告
2024-07-18 广告
稳频稳压电源哪家好?艾普斯电源(苏州)有限公司开始专业研发、制造及营销交流稳压电源,满足全球电子及信息业对电源设备日益蓬勃的市场需求。迄今为止,业已发展成为交流不间断电源、稳压电源、变频电源、中频航空- 军事专用电源、直流电源、逆变电源等产...
点击进入详情页
本回答由艾普斯提供
展开全部
可以肯定的告诉你,你找的答案肯定不对。
不信你输2.225看一下,结果还是2.22
原程序一直在对Y处理,结果最后都没有返给X。肯定不对。
为什么可能会出现正确的结果,这个就很复杂了,要从浮点的存储说起了。
我现在也还不是很了解。
浮点数在计算(特别是和整型混合计算时)、输入和输出的时候都可能有精度的丢失。
具体的我也不是很懂,你可以自行去研究一下。
比较完美的程序应该要用DOUBLE类型,提高精度。
就算有返加给X,用FLOAT类型还是会出错。很难理解。
#include<stdio.h>
void main()
{
double x;
int y;
printf("请输入一个实数:\n");
scanf("%lf",&x);
y=x*1000;
if(y%10<=4)
y=y-y%10;
else
{
y=y+10;
y=y-y%10;
}
x=(double) y/1000;
printf("该实数,四舍五入保留两位小后是%.2lf\n",x);
}
不信你输2.225看一下,结果还是2.22
原程序一直在对Y处理,结果最后都没有返给X。肯定不对。
为什么可能会出现正确的结果,这个就很复杂了,要从浮点的存储说起了。
我现在也还不是很了解。
浮点数在计算(特别是和整型混合计算时)、输入和输出的时候都可能有精度的丢失。
具体的我也不是很懂,你可以自行去研究一下。
比较完美的程序应该要用DOUBLE类型,提高精度。
就算有返加给X,用FLOAT类型还是会出错。很难理解。
#include<stdio.h>
void main()
{
double x;
int y;
printf("请输入一个实数:\n");
scanf("%lf",&x);
y=x*1000;
if(y%10<=4)
y=y-y%10;
else
{
y=y+10;
y=y-y%10;
}
x=(double) y/1000;
printf("该实数,四舍五入保留两位小后是%.2lf\n",x);
}
追问
只保留小数点后面两位 请问为什么float和double有区别?我用float测试2.225还是错的。而且好像就就2.xxx这一类数不同,其他大部分都可以运行= =
追答
float 单精度,只有4个字节
double双精度,有8个字节。精度更高啊
有的可能,有的不行,这跟浮点数的存储和计算都有关系的。我也不是很懂。
这个程序肯定要用DOUBLE类型的,FLOAT肯定不行。
你用这个程序试一下
#include
void main()
{
float x;
printf("请输入一个实数:\n");
scanf("%f",&x);
printf("%f\n",x);
}
这样不进行任何处理,输入某些数据,float类型输出的数据都不一样。
比如55.55 输出55.549999
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询