float和long的数据范围问题

float:四个字节。long四个字节,但是float的存储范围比long的存储范围要大。

但是在我阅读《java核心卷一》的时候,long转float时会有精度损失问题,即long转float是有可能丢失末尾的几位有效数字。

java的精度问题有两个类可以解决:BigInteger(大整型)和BigDecimal(大浮点型)

https://mp.youkuaiyun.com/postedit/100125465
为什么float的4个字节比long类型的8个字节的范围大


因为整数与小数的底层存储有点不同。
相同点:它们都是用二进制存储的
不同点:
    小数先转成二进制,然后处理,然后存储。
    
例如:8.25
(1)小数先转成二进制
十进制:8.25
二进制:1000.01    

(2)处理
二进制:1000.01      处理成科学记数法
        1.00001 * x的3次
        
0.00125 ->0.0000 0000 ....==》     处理成科学记数法 1.xxx * 某的-n次    

规律:科学计数法处理后
A:整数部分一定是1
B:指数部分是一个整数
C:小数点后面是一串数字

(2)如何存储
A:整数部分一定是1 不存
B:指数部分是一个整数  要存储   float类型分配8位专门用来存储指数,double分配了11位
C:小数点后面是一串数字  要存储   float剩下的23位用来存储尾数,double剩下的52位存尾数
D:正号和负号   最高位是0是正,1是负

存储方式不同


(1)我们float和double是存储2的幂次方,所以数据范围比long要大。
(2)float用23位存尾数,double用52位存尾数,精度范围double比float大。
        float的精度大概是小数点后6~7位,double是15~16
(3)十进制的小数转为二进制时,尾数可能是无限长,那么我们尾数位又是只有23或52位,
意味着超出部分会被截掉,这样就是我们float和double是浮点型,不精确的。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值