小数是由整数和小数两部分组成,由点号.隔开,如0.23、0.444、23.67、-3.98等都是合法小数,属于十进制数。除此外,还有指数形式,如7.25103、0.035105、-27.36*10-3等。任何小数都可以用指数形式来表示。
在C语言中,小数的指数形式为:
aEn或aen
解释:a为尾数部分,是一个十进制数;n为指数部分,是一个十进制数;E或e是固定的字符,用于分割尾数部分和指数部分。整个表达式等价于
a*10n
2.1E5=2.1*105
3.7E-2=3.7*10-2
0.5E7=0.5*107
在C语言中,只有float和double两个小数类型,float被称为单精度浮点数型,double被称为双精度浮点数。小数的长度是固定的,float始终占用4个字节,double始终占用8个字节。
小数的printf()输出
通常对于小数的输出由十进制形式和指数形式,对应的格式控制符分别是:
%f 以十进制形式输出float类型;
%lf 以十进制形式输出double类型;
%e 以指数形式输出float类型,输出结果中的e小写;
%E 以指数形式输出float类型,输出结果中的E是大写;
%le 以指数形式输出double类型,输出结果中的e小写;
%lE 以指数形式输出double类型,输出结果中的E大写;
另外,还有一种更智能的printf()输出方式,就是使用%g,它会对比小数的十进制形式和指数形式,以最短的方式来输出小数,让输出结果更加简练,即输出结果占用最少的字符。
#include<stdio.h>
#include<stdlib.h>
int main()
{
float a = 0.302;
float b = 128.101;
double c = 123;
float d = 112.64E3;
double e = 0.7623e-2;
float f = 1.23002398;
printf("常规输出指数型小数:\n");
printf("a=%e \nb=%f \nc=%lf \nd=%lE \ne=%lf \nf=%f\n", a, b, c, d, e, f);
a = 0.00001;
b = 30000000;
c = 12.84;
d = 1.229338455;
printf("更加智能地输出指数型小数:\n");
printf("a=%g \nb=%g \nc=%g \nd=%g\n", a, b, c, d);
return 0;
}
数字的后缀
在C语言中,一个数字若无任何标识,那么它就是默认类型的;对于整数,默认是int类型,对于小数,默认是double类型。
long a = 100;
int b = 294;
float x = 52.55;
double y = 18.6;
在上面例子中,100和294属于默认int类型,但将100赋值给a时,必须先从int类型转换为long类型;52.55和18.6属于默认double类型,但将52.55赋值给x时,必须先将double类型转换为float类型。
所以,你可以手动在数值后面加上后缀,指明具体类型:
在整数后面加上l或L(不区分大小写)表明数值是long类型;
在小数后面加上f或F(不区分大小写)表明数值是float类型。