浮点类型
基本介绍:Java 的浮点类型可以表示一个小数,比如 123.4 ,7.8 ,0.12 等等
分类:
类型 | 占用存储空间 | 范围 |
单精度float | 4字节 | -3.403E38~3.403E38 |
双精度double | 8字节 | -1.798E308~1.798E308 |
说明:
1)关于浮点数在机器中存放形式的简单说明,浮点数=符号位+指数位+尾数位
2)尾数部分可能丢失,造成精度损失(小数都是近似值)
浮点类型使用细节:
1.与整数类型相似,java浮点类型也有固定的范围和字段长度,不受具体OS(操作系统)的影响(float 4个字节,double8个字节)
2.Java的浮点型常量默认为double型,声明float型常量,须后加“f”或“F”
float m1 = 1.1;
//是不对的,1.1默认为double,不能转成float
float m2 = 1.1F;
System.out.println(m2);
//这是对的,两边都是float,匹配
double m3 = 1.1;
System.out.println(m3);
//对的,两边都是double
double m4 = 1.1F;
System.out.println(m4);
//也是对的,float精度没double高,可以转换
3. 浮点型常量表示形式
十进制数形式:如:5.12 512.0f .512(0.512 这个0可以省略 但是.不能省略)
科学计数法形式:如:5.12e2(5.12*10的2次方) 5.12E-2(5.12/10的2次方)
System.out.println(5.12e2);//512.0
System.out.println(5.12E-2);//0.0512
4.通常情况下,应该使用double型,因为它比float型更精准
double nm1 = 2.1234567851;
float nm2 = 2.1234567851F;
System.out.println(nm1); //2.1234567851
System.out.println(nm2); //2.1234567
5.浮点数使用陷阱
2.7和8.1 / 3比较
double num3 = 2.7;
double num4 = 8.1 / 3;
System.out.println(num3); //2.7
System.out.println(num4); //接近2.7的一个小数,而不是2.7
当我们对运算结果是小数的进行相等判断,要小心
应该是以两个数的差值的绝对值在某个精度范围类判断
如果是直接查询得到的小数或者直接赋值,是可以判断相等的