为什么0.1+0.2!=0.3

为什么当我们使用电脑浏览器计算0.2+0.1的时候,结果却是0.30000000000000004,这个问题其实一直是一个经典的问题,甚至有一个网站的域名就是:https://0.30000000000000004.com/,但是全英文的,不适合大多数中国的程序员。然后我又找了很多资料,发现说与计算机的存储方式有关系,什么IEEE754;还是一头雾水,不好理解。今天我来给大家分享一下我的理解

首先:十进制怎么转二进制

对于整数部分:除以2 取余数,一直进行下去【除2取余】

对于小数部分:乘以2 取整数,继续小数部分乘以2 取整数,直到小数部分为0【乘2取整】

规则是这样的,但是不好理解,下面我们先反着看:

我们先来看  十进制能怎么转化

【123  => 1*100+2*10+3*1】

                 10**2      10**1   10**0

【0.123】 = > 1/10 + 2/100 +3/1000

                    10**-1    10**-2    10**-3

我们再来看看二进制怎么转为十进制:

110  ====>1*(2**2) + 1*(2**1) + 0*(2**0) = 6

0.101====>1*(2**-1) + 0*(2**-2) + 1*(2**-3) = 0.625

然后总结规律,从右边向左边看

第一条:是不是刚好符合  除以2 取余数

第二条:是不是刚好符合  乘以2 取整数

然后:我们来看看 :0.1和0.2

 

最后总结:很显然,两个都是截取数据,所以就变得不精准了

比如一个数 1÷3=0.33333333...... 大家都知道3会一直无限循环,数学可以表示,但是计算机要存储,方便下次取出来再使用,但0.333333...... 这个数 无限循环,你让计算机怎么存储?计算机再大的内存它也存不下,对吧! 所以不能存储一个相对于数学来说的值,只能存储一个近似值,所以当计算机存储后再取出来用时就会出现精度问题。

解决方案:

math.js 或 BigNumber.js

【他的大概原理是将所有数字当做字符串,重新实现了计算逻辑】

更多同步知识分享

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值