C语言中,float和double都属于浮点数。区别在于:double所表示的范围,整数部分范围大于float,小数部分,精度也高于float
举个例子:圆周率3.1415926535这个数字,如果用float来表示,最多只能精确到小数点后面的6位。而double大约能精确到小数点后面的15位左右。具体精确到几位,跟所用的编译器有关,但是各个编辑器编译器之间,也是相差不大的。
至于整数部分,float表示的整数部分的范围,就已经够大了,能表示到万亿级别,已经大到没边了。而double所表示的整数范围,大到更没边了。
实际开发中,除了个别高精领域,基本上,使用float就足够了。
我们可以用程序,实际测试一下。如下程序:
_______________________________________________
float num1 = 3.1415926535;
double num2 = 3.1415926535;
printf('num1 = %.10f , num2 = %.10fn' , num1 , num2);
_______________________________________________
上面这几行程序的运行结果如下图所示:
上图中,num1的结果中,只能精确到小数点后面第六位,也就是:3.141592, 第七位,本来是6,但是上图中的运行结果,却是7了。也就是说,float只能精确到小数点后面六位,在往后,数字就不精确了。但是,num2的运行结果,是正确的。这说明:double所能精确到的小数点位数,比float多很多位。
上面的程序,我们验证了,float所表示的小数的精度,小于double
还有一点需要注意,就是:float和double表示的是,实数。实数不仅仅是小数,还包括:科学计数法。
比如: 3.14乘以10的3次方,结果是:3140,这个结果并不是小数,而是在写科学计数法的时候,形式上是有小数的。但是这个数字本身是3140,不是小数。
如下面这个程序:
_______________________________________________
float num1 = 3.14E3;
double num2 = 3.14E3;
printf('num1 = %.0f , num2 = %.0fn' , num1 , num2);
_______________________________________________
程序运行结果如下:
上图中的运行结果,都是3140
所以,我们应该这样理解:float和double都能表示带有小数点的数,但是,带有小数点的数,并不一定是小数,还包括科学计数法。在C语言中,10的N次方,用EN来表示。如3.14乘以10的3次方,可以这样表示: 3.14E3,字母E可以是大写,也可以是小写。
如:这样的写法,也是可以的: 3.14e3
希望以上我的回答,能够帮助到您!