前面所说的数据类型只能用于处理整数。如果我们需要使用小数,就要使用浮点类型(floating-point)。C 提供了三种浮点类型:float, double, 以及 long double。注意,unsigned/signed 不能用于修饰浮点类型。浮点类型可以处理正数,也能处理负数。没有无符号浮点型。
C 标准要求 float
类型至少要能精确表示到小数点后6位。float
一般是 32
位的。
C 标准规定 double
类型至少要能精确到小数点后 10
位。double 通常是 64 位的。
C 还提供了 long double
类型,目的是提供一种比 double 更加精确的类型。然而,C 标准仅仅规定 long double 至少要和 double 一样精确。long double 通常 96 位或者 128 位。
2. 声明浮点型变量
浮点型变量的声明和初始化与整型变量一样。例如:
float f_1, f_2;
double d_1;
float f_3 = 6.63;
long double ld_1;
3. 浮点型常量
浮点型常量有多种写法。其基本形式为:首先写整数部分(可以带符号),接着写小数部分,然后写 e
或者 E,最后再写一个有符号整数。例如:
+1.2E+5
1.5e-9
-5.0e10
其中 e 或 E 被称为阶码标志,e 或 E 后面的有符号整数被称为阶码。阶码代表 10 的阶码次方。例如:+1.2E+5 的值是 1.2 * 105。假设 A 为 e 前面的部分,N 是 e 后面的部分,则 AeN 等于 A * 10N。此外,正号可以省略不写。小数部分也不是必需的,也就是说,5e3
也是正确的。阶码标志和阶码也可以不写,如:13.5。小数点后面,阶码标志之前的那部分整数可以不写(9.E5),小数点之前的整数也可以不写(.96e-8),但是不能同时都不写。例如:
当然,我们也可以指定浮点型常量的类型。在浮点型常量后面添上 f
或者 F,编译器就会用 float
类型来处理这个常量。例如:1.5f,2.1e6F。在后面添上 l
或者 L
的话,编译器会用 long double
类型来处理这个常量。例如:4.1l,50.2E5L。最好用大写 L,因为小写 l
容易和数字 1 混淆。