0.1+0.2不等于0.3

 我来答
濒危物种1718
2022-06-13 · TA获得超过1.2万个赞
知道大有可为答主
回答量:6359
采纳率:100%
帮助的人:43.6万
展开全部
在计算机里,所有的数据都会转化为二进制被存储
而0.1和0.2是十进制,它们需要转换为二进制被存储

先以整数为例
10转化为二进制就是1010,怎么算出来的?
1 * 2^3 + 0 * 2² + 1 * 2^1 + 0 * 2 = 8+2 = 10
反过来说,1010总共有四位,第一位为0乘以2的零次方,第二位为1乘以2的一次方,以此方式计算下去

那么小数又是如何计算的
以0.5来说,就是1乘以2的负一次方
小数点后的二进制计算规律为:位数越往后计算方式为2的负N次方,N递减1

那么0.1转换成2进制又是怎么算的?
当然用上面的N递减1来算很麻烦,所以真正使用的是乘2取整法
以0.1为例:

根据上面的结果可以看出,0.1转化为二进制会是一个无限循环小数(双精度浮点数),而计算机不可能一直存储下去,所以会在限定位数取整(IEEE 754 标准的 64 位双精度浮点数的小数部分最多支持53位二进制位)

正常规律讲,其实后面依然为0011,但是长度已经超过最大值,所以对下一位进行取整,由于下一位是1,所以最后一位则从0变为1,因此实际存储结果会比0.1更大一些
0.0001100110011001100110011001100110011001100110011001101 // 取整后
0.000110011001100110011001100110011001100110011001100110011 // 正常结果

0.2也是如此,其结果依然会比0.2大一些

那么0.1的二进制 加上 0.2的二进制,其结果就为
0.0100110011001100110011001100110011001100110011001100111
该值转为10进制,则结果为0.30000000000000004

所以,0.1+0.2不等于0.3
参考文章: 为什么在JavaScript中0.1+0.2不等于0.3?

===会比较数据类型,那么什么时候会用到双等号呢?
null == undefined的时候
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式