学习任务:

视频学习Java浮点型的基本使用

动手测试案例

思考float为什么比long表示的数据范围大?

float、double都可以表示小数,在Java中它们被称为浮点型,它们可以表示的数据范围不同:

float型 内存占4个字节,共32位,范围从-3.4028235E38到3.4028235E38。

double型内存占8个字节,共64位,范围从-1.7976931348623157E308到1.7976931348623157E308。

浮点型数据的表示采用科学计数法,3.4028235E38等于3.4028235 * 10^38(读作3.4028235 乘以10的38次方)

科学记数法是一种记数的方法。把一个数表示成a与10的n次幂相乘的形式(1≤|a|<10,a不为分数形式,n为整数),这种记数法叫做科学记数法。科学记数法的好处是当我们要标记或运算某个较大或较小且位数较多的数时,用科学记数法免去浪费很多空间和时间。(摘自百度百科)

全世界人口数大约是:6100000000,用科学记数法表示为6.1×10^9。

科学记数法表示一个数由尾数(也叫有效数)、底数和指数组成,即尾数× 底数 ^ 指数,

比如:3.4028235 * 10^38,3.4028235 是尾数,10为底数,38为指数。

Java中表示浮点型常量时要求如下:

float类型的常量后边需要加后缀大写F或小写f。

double常量后边统一带后缀大写D或小写d。

测试代码如下:

/**
 * Java浮点数据类型测试 
 * @author 攀博课堂(www.pbteach.com)
 *
 */
public class DataTypeDemo2 {
	public static void main(String[] args) {
		//float类型的数据后边需要加后缀大写F或小写f
		float a = 3.14f;
		//给float赋值一个整数就不报错,为什么?
		float b = 2;
		//也可以用科学计数法表示 
		float c = 1.14e10f;
		//下边不报错
		double d = 3.14;
		//对于double数据后边统一带后缀大写D或小写d
		double e = 3.14D;
		//下边报错
		//float f = 3.14;
		System.out.println(a);
		System.out.println(b);
		System.out.println(c);
		System.out.println(d);
		System.out.println(e);
	}
}

为什么 float a = 3.14报错?

程序中浮点数类型的字面常量编译器默认为double类型,double类型所表示的数据范围比float要大,编译器不允许将double数据直接赋值给float,因为可能会造成精度损失。

long类型可表示的数据范围为-2^63---2^63-1,float可表示的数据范围为-3.4028235E38到3.4028235E38。

long占8个字节,float占4个字节,为什么float可以表示的范围比long大呢?

Java中浮点数遵循IEEE 754 规范,什么是IEEE 754 规范?

IEEE 754 是20世纪80年代以来最广泛使用的浮点数运算标准,为许多CPU与浮点运算器所采用它,IEEE 754规定了四种表示浮点数值的方式:单精度(32位)、双精度(64位)、延伸单精度(43位以上,很少使用)与延伸双精度(79位以上,通常以80位实现)。

针对单精度IEEE754描述它的内存的存储方式如下(图片来源于维基百科):

image-20200730181714519

上表按纵向看:S为符号位,Exp为指数位,Fraction为尾数位(也叫有效数位)。

最高位为符号位 :1为负数,0为正数。

指数位:23到30为指数位,共8位,指数范围是−126~+127,为了指数部分只存储一个无符号数则存储时加上127再存储,所以指数位存储的数据范围 为1-254,但是注意:在实际计算时要将指数位的数减去127得到实际的指数。

尾数位:共23位。

指数决定了数据范围的大小,float类型的指数位最大为127,所以float类型的数据范围为:

-2* 2^127 到2*2^127,即-3.4028235E38到3.4028235E38。

为什么是2的127次方呢?因为计算机底层存储二进制,二进制数的科学计数法中底数为2。

针对双精度,IEEE754描述它的内存的存储方式如下(图来源于维基百科):

image-20200730182203658

double类型的指数位共11位,它的范围是−1022~+1023,所以double类型的数据范围为:

-2* 2^1023到2*2^1023即-1.7976931348623157E308到1.7976931348623157E308。

尾数决定了数据的精度,精度为小数点后边的位数,double类型的尾数位为52位比float的尾数位长,所以double可表示的数据的精度要比float大。

提问-攀博课堂
我要提问 不会就问,有效沟通
关注公众号,加入微信群交流提问。 攀博课堂官方公众号
问答列表,查看本知识点所有问题