数据类型
1.浮点数
浮点数也称小数或实数,C语言中用float和double关键字来定义小数。其中float为单精度浮点型,double为双精度浮点型。
1.float
C语言规定,float类型必须至少能够表示6位有效数字,且取值范围至少是10^(-37) ~ 10^37.
- float类型数据表示的是一个近似的小数,不是精确地,小数点后n位有误差,浮点数的位数越大,误差就越大。到了有效数字8位以后误差位1,基本不能用。
- 用“==”来测试两个整数或字符相等,但是在float类型“看似”相等的数,却不是相等的。
2.double
double类型和float类型的足校范围相同,但至少能必须表示10位有效数字。
- double类型数据表示的是一个近似的小数,不是精确地,小数点后n位有误差,浮点数的位数越大,误差就越大。到了有效数字17位以后误差位1,基本不能用。
- 可以用“==”来测试两个double类型数据是否相等。
3.long double
long double类型,以满足比double类型有更高的精度要求。不过C语言只保证long double类型至少与double类型的精度相同。
(.)点使用内存的情况
测试下float,double和long double占用的字节数。
#include<stdlib.h>
#include<stdio.h>
int main()
{
printf("float:\t%d\n",sizeof(float));
printf("double:\t%d\n",sizeof(double));
printf("long double:\t%d\n",sizeof(long double));
}
运行结果:
float: 4
double: 8
long double: 16
4.浮点数的输出
float类型数据使用%f输出,double类型数据使用%lf输出,long double类型数据使用%Lf输出注意L是大写。
格式化输出
浮点数的格式化输出形式为:%.mlf,表示小数点保存m位。%x.mlf输出格式为:宽度为x,小数部分为m位。
示例:
#include<stdlib.h>
#include<stdio.h>
int main()
{
double d=(double)8/3;
printf("d=%.2lf\n",d);
printf("d=%.10lf\n",d);
printf("d=%10.5lf\n",d);
}
运行结果:
5.常用的库函数
double atof(const char *ptr); //将字符串转化为double
double fabs(double n); //求双精度n的绝对值
double pow(double x,double y); //求x的y次方
double round(double x); //将x四舍五入
double ceil(double x); //double向上取整
double floor(double x); //将x向下取整
double fmod(double x,double y); //求x/y的双进度余数
double modf(double x,double *y); //把双精度x分加成整数部分和小数部分,整数部分放在y中,返回小数部分。
6.科学计数法
科学计数法采用%e或%E来输出,完整的输出格式是:%m.ne.其中m是数据的宽度,n表示小数位数。
示例:
#include<stdlib.h>
#include<stdio.h>
int main()
{
long a=1234567899;
printf("a= %e\n",a);
printf("a= %e\n",a);
}
运行结果:
a= 9.881313e-324
a= 9.881313e-324