前段时间公司测试,看到同事有一道关于基础数据类型转化的题,大致意思是byte,short,int,long,float,double从左到右和从右到左的区别,其中有一个解析写明了从左到右和从右到左都会出现精度缺失的问题,但是其中
byte的范围是-2^7~2^7-1
short的范围是-2^15~2^15-1
int的范围是-2^31~2^31-1
long的范围是-2^64~2^64-1
float的范围约为-3.4028235E38~3.4028235E38
double的范围是-1.7976931348623157E308~1.7976931348623157E308
其中不难看出,byte,short,int,long,float,double从右到左进行数据转换必然要进行强制类型转换,从而导致数据丢失,但是当时看到的第一想法就是从左到右为什么会精度缺失?
查找资料后才反应过来,原来对于float和double来说,虽然表示的位数足够大,但是其中有些数字是没办法精确表示的,当int值取这些数字时,就会产生精度缺失。
产生精度缺失的原因:以下用int和float进行转换举例说明
int在java中占了4个字节而float也占了4个字节,但是由于float采用浮点表示,float的24位分别由1位符号位,8位指数位以及23位尾数位表示,也就是说当int类型的数据占超过23位时,转换成float就不会全部显示了。