在计算机中,浮点数是用科学计数法存储的,不管数值多大都是计数到小数点后一位,
即3.14=0.314E2 0.0314=0.314E-1,前面一位是符号为,后跟指数,再跟数值。然后把一个
小数转化成二进制数是这样的:
例如:0.3
计算:
0.3*2=0.6…………0
0.6*2=0.2…………1
0.2*2=0.4…………0
0.4*2=0.8…………0
0.8*2=0.6…………1
0.3*2=0.6…………0
0.6*2=0.2…………1
0.2*2=0.4…………0
0.4*2=0.8…………0
0.8*2=0.6…………1
………………..
从上往下得出:01001 01001 01001 …….
然后我们发现这是一个循环,虽然我们用10进制表示0.3是一个有尽小数,然而转换成二进制,它是一个无尽小数。而java中不管是float还是double类型的浮点数都是有字节限制的,float除了符号位跟指数部分,存储数值只剩下23bit(位),所以计算到23位以后的2进制都会舍弃,所以,计算机中,存储0.3
—> 0 (第一位符号位,表示正数) 00000000(8位指数部分,这里是0,然后指数的正负忘记怎么存的了,反正记得它是不占字节的)
—> 01001 01001 01001 01001 010(23位表示0.3的数值,这里存的是补码,因为正数的补码还是它本身)
连贯起来就是计算机保存—> 00000000001001010010100101001010