[java基本类型]-long与float的数据转换,精度是如何丢失的

程序:

    public static void main(String[] args) {
        int a = 49969950;
        System.out.println((float) a);
    }

输出结果:

4.9969952E7

是怎么运算的呢?
49969950是我们认知的十进制,但是计算机是只认0和1的。
所以49969950的二进制表现形式为10111110100111101100011110,这是整型没有问题。
如果把这个数值转成float会发生什么呢?

float的存储结构

float 在内存种占4个字节,32位
从高位到地位排列:1位符号位 + 8位指数位 + 23位尾数位
浮点数的存储是使用科学计数法

根据float存储类型来换算
49969950 对应的二进制为10111110100111101100011110,用二进制科学计数法表示就是1.0111110100111101100011110*225

225表示2的25次方

但是由于float类型的小数位是23位,实际上是25位,那么这里在实际存储的时候就会改变,
1.01111101001111011000111 10*225实际存储为:
1.01111101001111011001000 *225
这个转换为二进制就是
10111110100111101100100000

这个二进制转换成十进制的数值就变成了49969952

进制转换网站:https://www.h-schmidt.net/FloatConverter/IEEE754.html

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值