JAVA中为什么大部分浮点数字计算机中是不精确的?

浮点数在计算机中的储存方式
浮点数是基本数据类型,有double和float,其由整数和小数部分组成。

1、浮点数的表示格式
1.1、十进制格式
0.00172=1.72*10^-3,1.72为系数(或尾数),10^-3为指数,10为指数的基数,-3位为指数的阶数。科学计数法表示为1.72E-3,由于1<=1.72<10,因此称系数是规格化的。
1.2、二进制格式
比如19.625,整数部分19的二进制为10011,而小数部分0.625的二进制为101,则总体表示为10011.101,科学计数法表示为1.0011101*2^4

因为小数点后第一位为2^-1,小数点后第二位为2^-2,依次类推。那么0.625=0.5*1+0.25*0+0.125*1=101。
2、浮点数的存储
IEEE 标准754将浮点数的存储分三个部分:
符号位
指数位
有效数字(系数位)
单精度浮点数32位=1位符号位+8位指数位+23位有效数字
双精度浮点数64位=1位符号位+11位指数位+52位有效数字

bf4c3f2c735c478daa55a1ed68a6d211.png

2、浮点数的存储
IEEE 标准754将浮点数的存储分三个部分:
符号位
指数位
有效数字(系数位)
单精度浮点数32位=1位符号位+8位指数位+23位有效数字
双精度浮点数64位=1位符号位+11位指数位+52位有效数字

5e470b4f780543a0a9cdc9b8a6093b4e.png

2a8e02ed646e4511ac9f3a151229d15e.png 

15f69e2b78654c708ad1d1c00a069609.png 

2904be48b75541ba9b789cb4357836bd.png 

 最后,由于计算机中保存的小数其实是十进制的小数的近似值,并不是准确值,所以,千万不要在代码中使用浮点数来表示金额等重要的指标。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值