先说结论,为什么不相等呢?因为浮点数表示小数的时候存在精度损失,为什么会出现精度损失呢?因为计算机硬件以二进制(10101010)形式存储数据。比如每个字节是8位,int类型占4个字节。即32位精度;那么32位计算机精度可以存储2的32次方的数据。如下图所示:每个位可以放两个二进制数据,即0或1;一般最高位是符号位(1表示负数,0表示正数),所以有符号类型的数据应该是312222。..2(31个2s),加上符号范围是-2147483648~2147483647;当然也有无符号整数,那么小数点如何保存呢?小数在计算机里叫浮点数类型,JS最终会从浏览器引擎转成C++,但是JS里只有一种数值类型,那就是number,那C++里number是什么类型;我们暂时认为是double类型,即double,在C++中占用四个字节,即64位存储。整数存储,参考上文。重点是浮点存储。同样的64位存储可以分为三部分。其格式基于IEEE754标准:第1部分:符号位(S),占1位,即第63位;第二部分:指数字段(E),占11位,即52位到62位,包括52位和62位;part3:尾数域(F),占52位,即第0位到第51位,共51位;如果将十进制转换为二进制64位表示,则以12.52571为例,然后将其转换为二进制(将二进制文件转换为二进制)(网络管理器工具二进制二进制转换)12.52571=>1100.1000010011001100100111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111边m*2^3得出结论因为是整数,所以符号位S为0;因为向左偏移了三位,所以E=1023+3=1026(转换为二进制)=>10000000010,有11位,不是足以在前面添加0,为什么要添加1023?为什么左移是是加是是加是是尾数((((()10010000100110100100111111111111111111111111100100100111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111太西来来来也不了。最后面补零,即0100000000101001000011010010100111011100011100100101110000111110;那么12.52571的64位计算机存储形式就是上面的;回过头来看上面0.1+0.2的表达式可能有点迷糊,肯定的,毕竟作者也是一个参考(权当笔记,以备日后复习),暂且不提;那么0.1和0.2怎么转呢?这里有个问题,0.1和0.2转成二进制小数点还有个循环//0.1转成二进制0.00011001100110011...(0011死循环)//0.2转成二进制0.00110011001100110011...(0011无限)52位只只只只位只位位位位52位位位之后的被被被被被)要添加两个数字,第一个E需要相同,因此以下E=-3;F=0.1100110011001100111001111001100110011001100110011001(52位)//Surre添加两个给出E=-3;F=10.01100110011001100110011001100110011001100110011001100110011001100110011001100110011111111111111111111111------------------------------------------------------------------------E=-2;F=1.0011100110011001100110011001100110011001100110011100111结论为2^-2*1.0011001100110011001100110011001100111001110011001111此值将其值转换为真实值,并且结果是:0.300000000000000000000000000000000040004jav输入bigInt(ES8)a在TypeScript中也有这种类型有解决精度问题的big.js和bigInt库,也有缺乏精度的语言。)和doubleprecision(64位),JS使用后者的浮点数不同于整数,一个浮点数既包含整数部分又包含小数部分,因为表示的不同,需要分析成整数和小数部分,然后相加得到结果。0.1和0.2先转化为二进制,再转化为同维计算,得到二进制后,再转化为十进制,就变成0.300000000000000004
