java中int和float,long和double为什么会精度缺失

        前段时间公司测试,看到同事有一道关于基础数据类型转化的题,大致意思是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就不会全部显示了。

  • 10
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值