1. 处理带小数的数值
我们来讨论一下类似于1.234567,0.00001,这类非整数的数据。
我们可以先试试看,int能不能装这些数据呢?
#include <stdio.h>
int main()
{
int a = 1.234567;
int b = 0.00001;
int c = 365.12345;
printf("%d\n", a);
printf("%d\n", b);
printf("%d\n", c);
return 0;
}
好像不太行,小数部分都丢失了。那怎么办呢?
这时候我们就需要引入新的类型了——浮点类型。
2. 浮点类型:float
我们把上面代码中的整型int
,用单精度浮点型float
替代。
之后,再将printf("%d\n",a);
中的占位符是%d
,所以我们用%f
替换。(%d
占位符用于整型,%f
占位符用于浮点型)
替换完成之后,我们再来试试看。
#include <stdio.h>
int main()
{
float a = 1.234567;
float b = 0.00001;
float c = 365.12345;
printf("%f\n", a);
printf("%f\n", b);
printf("%f\n", c);
return 0;
}
将int
替换成float
之后,大部分的数据都是正确的。但是365.12345
变成了365.123444
,很明显精度出现了误差。
这是因为,浮点数并不能表示无限的精确,它会存在着一定的误差。
C标准规定,float类型必须至少能表示6位有效数字,并且取值范围至少是10^-37~10+37。
所以,使用float来装365.12345时,前面六位数值是准确的,但是后面的数值略有误差。