Java基础-为什么计算机中大部分浮点数是不准确的

十进制由0~9十位数字组成,逢九进一。计算机只能识别二进制数,即0和1。所以在运行时要转换为二进制。

一、进制间的转换(整数部分)

        1、十进制与二进制

        十进制转二进制,把十进制数的值除以2,得到商和余数两个部分,商一直除以2,直到商为0为止,把余数倒着看,就是最终转换成二进制的结果。

        例如:十进制数123 转换为二进制数 1 0111

 

        二进制转换为十进制,则是从右到左依次为2^0、2^1、2^2····2^n,将这个结果与对应二进制数的值(0或者1)相乘并以此相加,得到的就是对应十进制的数值。

        例如:二进制数 10 1101 转换为十进制数 45

         2、十进制与十六进制

        十六进制由0~9十位数字和ABCDEF六位字母来表示,ABCDEF依次为10~15。

        十进制转十六进制,把十进制数的值除以16,得到商和余数两个部分,商一直除以16,直到商为0为止,把余数倒着看,就是最终转换成十六进制的结果。

        例如:十进制数 123 转换为十六进制数 7B

         十六进制转换十进制的过程与二进制相同,从右到左依次为16^0、16^1····16^n,上下对齐做乘法运算,再讲乘积相加。

        例如:十六进制数 1AB 转换为十进制数 427

         3、十六进制与二进制

        每个十六进制数 0~F 都可以用相对应的四位二进制数表示出来 0000~1111。

        十六进制数转二进制数,每位十六进制数单独对应其四位二进制数,不够四位前面补零。

        例如:十六进制数 12AB 转换为二进制数 0001 0010 1010 1011

 

        二进制数转十六进制数,从右到左每四位划分为一个十六进制数,不够四位在前面补零。

        例如:二进制数 0010 1011 0111 1000 1101转换为十六进制数 2B78D 

    

二、进制间的转换(浮点数/小数)

        1、十进制小数转换为二进制

        十进制转二进制,小数部分乘以2,结果大于1则在小数位补1,小于1则在小数位补0,重复这个过程知道结果为零或者循环为止。若循环,小数位保留数值越多结果越精确。

        二进制转十进制,小数部分从左到右依次取2^-1、2^-2·····2^-n上下对齐相乘,再将结果相加。

        例如:将二进制小数 0.1010 1转换为十进制小数 0.6 5625

                        

         2、十进制与十六进制

        计算方法与二进制相同,将2^-1 替换为 16^-1即可。

        3、二进制与十六进制

        二进制转十六进制,小数后从右到左每四位转换为一个十六进制数,如果不够四位要在后面补零。

        例如:二进制数 1 0011.1001 1 转换为十六进制 13.98

         十六进制转二进制,小数点后面每位数字依次对应四位二进制数。

通过上述我们知道了数值之间的转换,那为什么说小数大部分是不准确的呢?如下所示:

十进制数转二进制数

0.1转换为:0.000110011001100.......

0.2转换为:0.00110011001100......

0.3转换为:0.0100110011001......

 ......

0.5转换为:0.1

......

在上述十进制转换位二进制的结果中,只有0.5可以精确转换为0.1,其余大部分小数会进入到循环,没有精确的数值,所以说小小数大部分都是不精确的!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值