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