C语言中的小数有两种类型,分别是 float 或 double;float 称为单精度浮点型,double 称为双精度浮点型。
1.浮动类型长度
在windows 64位系统中,float类型占据4个字节,double类型占据8个字节。
例如:
#include <stdio.h>
int main(){
int float_length = sizeof(float);
int double_length = sizeof(double);
printf("float length=%d, double length=%d\n", float_length, double_length);
return 0;
}
运行结果:
float length=4, double length=8
Float数据类型用于存储单精度浮点数。具有4个字节,包括一个符号位、一个8位二进制指数和一个23位尾数。由于尾数的高顺序位始终为1,因此它不是以数字形式存储的。此表示形式为float类型,提供了一个在-3.402823E38到3.402823E38之间的范围。
Double 变量以带符号的 IEEE 64 位(8 个字节)双精度浮点数形式存储,负值取值范围为 -1.79769313486231570E+308 到 -4.94065645841246544E-324,正值取值范围为 4.94065645841246544E-324 到 1.79769313486231570E+308。
在
例如:
#include <stdio.h>
#include <float.h>
int main(){
printf("max float = %f\n",FLT_MAX);
printf("min float = %f\n",FLT_MIN);
printf("max double = %lf\n",DBL_MAX);
printf("min double = %lf\n",DBL_MIN);
return 0;
}
运行结果:
max float = 340282346638528860000000000000000000000.000000
min float = 0.000000
max double = 179769313486231570000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.000000
min double = 0.000000
2.默认类型
一个数字,是有默认类型的:对于整数,默认是 int 类型;对于小数,默认是 double 类型。 例如:
#include <stdio.h>
#include <float.h>
int main(){
long a = 100; //默认把 int 转换为long
int b = 294;
float x = 52.55; //默认把double 转换为float
double y = 18.6;
printf("100 length is %d\n",sizeof(100));
printf("a length is %d\n",sizeof(a));
printf("52.55 length is %d\n",sizeof(52.55));
printf("x length is %d\n",sizeof(x));
return 0;
}
运行结果:
100 length is 4
a length is 4
52.55 length is 8
x length is 4
如果不想让数字使用默认的类型,那么可以给数字加上后缀,手动指明类型: - 在整数后面紧跟 l 或者 L(不区分大小写)表明该数字是 long 类型; - 在小数后面紧跟 f 或者 F(不区分大小写)表明该数字是 float 类型。
上例改写如下:
#include <stdio.h>
#include <float.h>
int main(){
long a = 100L; //默认把 int 转换为long
int b = 294;
float x = 52.55f; //默认把double 转换为float
double y = 18.6;
printf("100L length is %d\n",sizeof(100L));
printf("a length is %d\n",sizeof(a));
printf("52.55f length is %d\n",sizeof(52.55f));
printf("x length is %d\n",sizeof(x));
return 0;
}
运行结果:
100L length is 4
a length is 4
52.55f length is 4
x length is 4
3.输出控制符
浮动类型输出对应的格式控制符见下表 |控制符|描述| |-|-| |%f|以十进制形式输出 float 类型;| |%lf|以十进制形式输出 double 类型;| |%e|以指数形式输出 float 类型,输出结果中的 e 小写;| |%E|以指数形式输出 float 类型,输出结果中的 E 大写;| |%le|以指数形式输出 double 类型,输出结果中的 e 小写;| |%lE|以指数形式输出 double 类型,输出结果中的 E 大写|
例如:
#include <stdio.h>
#include <float.h>
int main(){
printf("max float = %f\n",FLT_MAX);
printf("max double = %lf\n",DBL_MAX);
printf("max float = %e\n",FLT_MAX);
printf("min double = %le\n",DBL_MAX);
printf("max float = %E\n",FLT_MAX);
printf("min double = %LE\n",DBL_MAX);
return 0;
}
运行结果:
max float = 340282346638528860000000000000000000000.000000
max double = 179769313486231570000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.000000
max float = 3.402823e+038
min double = 1.797693e+308
max float = 3.402823E+038
min double = 1.797693E+308