问题引入:
#include<stdio.h>
int main()
{
float i;
scanf("%f",&i);
printf("%f\n",i);
return 0;
}
输入:24.567
输出:24.5669999
float类型变量输入和输出的值不一样???
问题解答:
这是因为我们输入是十进制小数,而转化为机器代码,是用二进制表示的,小数部分转化为二进制(“乘2取整”),需要不断的乘以2,去其整数部分,但反复运算,有些小数是算不进的,而float是有位数长度限制的。计算机数据的浮点表示和整数表示的数据编码方式是不一样的,计算机表示浮点数会存在一定误差。
问题延伸:float(double)类型变量的大小比较
由于计算机表示浮点数存在误差,因此在进行两个浮点数之间的比较大小时不能像整数之间比较大小一样直接使用比较符号进行比较。举例说明:
#include<stdio.h>
int main()
{
int a,b;
float n,m;
//整数比较大小
scanf("%d%d",&a,&b);
if(a>=b)
printf("%d\n",a);
else
printf("%d\n",b);
//浮点数比较大小
scanf("%f%f",&n,&m);
if((a-b)>=0.000001)//设置的比较误差(0.000001)取决于当前系统的精度
printf("%f\n",n);
else
printf("%f\n",m);
return 0;
}
如果要判断浮点型是否相等,可以先求两个浮点型差的绝对值,再和系统精度(例:0.000001)比较。