作用:实型, 即浮点型,用于表示小数
浮点型变量分为以下两种:
单精度(float)
双精度(double)
两者区别在于表示的有效数字范围不同, 比如:数字3.14, 它的有效数字为3,1,4, 即有效数字是3位
数据类型 | 占用空间 | 有效数字范围 |
flat | 4字节 | 7位有效数字 |
double | 8字节 | 15~16位有效数字 |
单精度(float)
//定义float类型变量时,数值结尾处要追加一个字母f(f即float的第一个字母) //如果没有f,则编译器默认该数字为double类型,用8个字节空间来存放数字,然后将double转成float,这样精度可能会有损失 //如果有f,则编译器会用4个字节空间来存放数字,强制表示为float float f1 = 3.14f; //f1为float类型 float f2 = 3.14; //3.14被默认为是double类型,并最后强制转换为float类型 sizeof(f1); //返回4 sizeof(f2); //返回4, 存储空间不会因为小数后面没有f而变成8,存储空间只跟类型有关
为什么定义float类型变量,数字后面要追加f
不加f,数字会被默认为double类型,从double类型转成float类型是高精度转换为低精度,因此会出警告
当数值较小时,是没有问题的,不会出现数据丢失的情况
当数值较大时,由于是高精度转向低精度,就可能会出现数据丢失的情况
双精度(double)
//定义double类型变量时,数值结尾处无需额外追加字母,当小数结尾没有任何字母,则编译器默认其为double类型 double d1 = 3.14; //不需要额外加d sizeof(d1); //返回8
默认显示小数位数
float和double在默认情况下,都只显示6位有效数字
float f3 = 3.1415926f; //只返回3.14159,只显示6位 double d1 = 3.1415926; //只返回3.14159,只显示6位
科学计数法
float f1 = 3e2; // 返回300,即3乘以10的2次方 float f2 = 3e-2; //返回0.03,即3乘以0.1的2次方