浮点型变量是用来存储小数数值的。在C语言中, 浮点型变量分为两种: 单精度浮点数(float)、 双精度浮点数(double), 但是double型变量所表示的浮点数比 float 型变量更精确。
由于浮点型变量是由有限的存储单元组成的,因此只能提供有限的有效数字。在有效位以外的数字将被舍去,这样可能会产生一些误差。
区别在于:double所表示的范围,整数部分范围大于float,小数部分,精度也高于float。
举个例子︰圆周率3.1415926535这个数字,如果用float来表示,最多只能精确到小数点后面的6位。而double大约能精确到小数点后面的15位左右。具体精确到几位,跟所用的编译器有关,但是各个编辑器编译器之间,也是相差不大的。
#include <stdio.h>int main(){//传统方式赋值float a = 3.14f; //或3.14Fdouble b = 3.14;printf("a = %f\n", a);printf("b = %lf\n", b);//科学法赋值a = 3.2e3f; //3.2*1000 = 3200,e可以写Eprintf("a1 = %f\n", a);a = 100e-3f; //100*0.001 = 0.1printf("a2 = %f\n", a);a = 3.1415926f;printf("a3 = %f\n", a); //结果为3.141593return 0;}
#include <stdio.h>#include <limits.h>int main() {float a_float = 3.14f; // 6, 7~8 +-10^-37 ~ 10^37printf("size of float: %d\n", sizeof(float));double a_double = 3.14; // 15~16printf("size of double: %d\n", sizeof(double));float lat = 39.90815f;printf("%f", 39.908156f - lat);float money = 3.14f; // error, never use float or double to describe moneyreturn 0;}
