foat:4字节。 长长度为4字节,但浮点的存储范围比长长度的存储范围宽。
但是,当我读《java核心卷一》的时候,从长转换到浮点存在精度损失的问题。 也就是说,从长转换到浮点转换可能会丢失末尾的有效数字。
可以在两个类中解决java精度问题: BigInteger (大整数类型)和BigDecimal (大浮点类型)
3359 MP.csdn.net/posted it/100125465
为什么浮点的4字节比长类型的8字节范围大
因为整数和小数的基础记忆有点不同。
相同点:所有这些都以二进制形式保存
不同之处:
将小数转换为二进制后处理并保存。
例如8.25
)1)小数先转换为二进制
十进制: 8.25
二进制: 1000.01
(2)处理
二进制: 1000.01处理为科学记数法
1.00001 * x三次
0.00125 -0.0000 0000 .=="科学记数法1.xxx *某-n次处理
规律:用科学计数法处理后
a :整数部分必须为1
b :指数部分是整数
c :小数点以下是一系列数字
)2)如何保存
a :整数部分一定不存在1
(b )指数部是存储浮点型的整数,分配8位来存储指数,double分配11位
(c )小数点后的数字串将float的剩下的23位存储用于尾数存储,将double的剩下的52位存储用于尾数存储
)正负最高位为0为正,1为负
记忆方式不同
)1)由于我浮点和双精度是存储2的幂,所以数据范围大于长整型。
)2) float用23比特存储尾数,double用52比特存储尾数,精度范围double大于float。
浮点精度在小数点后6~7位左右,双精度为15~16
)3)从十进制小数转换为二进制时,尾数可能是无限长的。 那么,尾数只有23位或52位。
意味着超过的部分将被切掉。 也就是说,我们float和double是浮点型的,不准确。