浮点类型是C++中的第二种基本类型,浮点数能够表示带小数部分的数字。与整数型的区别就在于浮点数能够表示小数,非常小和非常大的数字,他们的内部表示方法与整数有天壤之别(这个我们之后在讨论)。
1、书写浮点数
浮点数有两种书写方法,一种是常用的标准小数点表示法。例如:
12.34
939001.222
0.00023
8.0
即是小数部分是0,小数点也将确保该数字以浮点格式(而不是整数格式)表示,第二种方法叫做E表示法,其外观像这样:3.45E6 这里指的是3.45乘以10的6次方,6被称为指数,3.45被称为尾数。下面是些例子:
2.52E+8
8.33E-4
1.69E12
你们可能注意到了,E表示法适合用来表达非常小和非常大的数字,指数可以是正数也可以是负数,然而,数字中不能有空格,所以7.2 E+6这样是非法的
(ps:d.dddE+n指的是将小数点向右移n位,而d.dddE-n指的是将小数点向左移n位。之所以叫做“浮点”,是因为小数点可以移动。)
2、浮点类型
C++有三种浮点类型:float,double和long double,这三种类型是根据他们可以表示的有效数字的位数和允许指数的最小范围来划分的。有效位数,是指数字中有意义的位。例如加利福尼亚的shasta山脉有14197英尺,该数字使用了五位有效位,而如果写成14000英尺,那就是两位有效位,因为该整数经过四舍五入精确到了千分位,其他的三位数字只不过是占位符而已,有效数字不依靠小数点的位置,比如14.147仍然是五位有效数字。
为了更好的帮助了解精度,接下来将写一段示例:
#include<iostream>
using namespace std;
int main()
{
cout.setf(ios_base::fixed,ios_base::floatfield);
float tub=10.0/3.0;
double mint=10.0/3.0;
const float million=1.0e+6;
cout<<"tub = "<<tub<<", and a million tub = "<<million*tub;
cout<<" ,and ten million tub = "<<10*million*tub<<endl;
cout<<"mint = "<<mint<<" ,and a million mint = "<<mint*million<<endl;
return 0;
}
输出结果为:
tub = 3.33333,a million tub = 3333333.250000,
and ten million tub = 33333332.00000
mint = 3.333333 ,and mint = 3333333.333333
一般cout会将结尾的零全部删去,但是这里使用cin.setf()函数会让零全部显示出来。由于cout只打印六位小数,所以tub和mint都是正确的,而将他们都乘以一百万后,他们的精度差异就显现出来了,一般来说,系统能够确保float至少有6位有效位,而dodble能够有15位有效位。在这里就有很好的验证。
这些就是浮点数的全部内容了。