数据类型

1.浮点数

浮点数也称小数或实数,C语言中用float和double关键字来定义小数。其中float为单精度浮点型,double为双精度浮点型。

1.float

C语言规定,float类型必须至少能够表示6位有效数字,且取值范围至少是10^(-37) ~ 10^37.

  1. float类型数据表示的是一个近似的小数,不是精确地,小数点后n位有误差,浮点数的位数越大,误差就越大。到了有效数字8位以后误差位1,基本不能用。
  2. 用“==”来测试两个整数或字符相等,但是在float类型“看似”相等的数,却不是相等的。

2.double

double类型和float类型的足校范围相同,但至少能必须表示10位有效数字。

  1. double类型数据表示的是一个近似的小数,不是精确地,小数点后n位有误差,浮点数的位数越大,误差就越大。到了有效数字17位以后误差位1,基本不能用。
  2. 可以用“==”来测试两个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);

}

运行结果:

iOS 浮点数精度 浮点数的精度范围_iOS 浮点数精度

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