1.有两个问题想请教一下
1.1第一个问题
在写程序时有四舍五入的条件,自己编写的时候发现了一个float数据类型的不同之处。
e.g
#include <stdio.h>
int main()
{
double S;
S=0;
scanf("%lf",&S);
printf("%.0f",S);
return 0;
}
输入2.5会自动四舍五入成3,但是在最后输出的部分改成printf("%.1f",S);时,输入2.55输出就是2.5,如果是2.551输出就是2.6。
请问这里为什么会发生这种情况。
1.2第二个问题
有点伸手党的感觉,但我找了很久网上资料也没找到。
想写一个程序,能根据输入的数据,用户的需求来进行不同位数的四舍五入。
比如输入2.5678,再输入自己想要进行的四舍五入需求进行处理。如果是小数点后3位四舍五入,输出就是2.568,如果是小数点后2位四舍五入,输出就是2.57。请问应该怎么编写?
#include<stdio.h>
int main()
{
double s;
int m;
scanf("%lf",&s) ;
m=(int)(s+0.5);
printf("%d\n",m);
return 0;
}
你四舍五入只是四舍五入了最后一位数字,
自己一步步调试一下,可以发现输入2.55后S的值为2.54999...这是由于double类型存储存在误差,只能这样逼近。
%.0f的四舍五入确实怪,还是用楼上的方法更保险。如果保留n位小数,就先乘以10^n,再+0.5取整,然后除以10^n。
可参考https://www.cnblogs.com/little-ant/p/7001413.html