Loading... **红宝书上有一个经典的例子,0.1+0.2!=0.3,当第一次看到的时候,百思不得其解,虽然知道浮点数在计算机中是如何存储的,但并不知道为何会出现这种情况** 首先要知道,数值在计算机中是转化为二进制数字进行保存的,然后就要讲到关于十进制转二进制小数部分的转换方法了。 以0.1为例: 0.1*2=0.2 取0 0.2*2=0.4 取0 0.4*2=0.8 取0 0.8*2=1.6 取1 0.6*2=1.2 取1 0.2*2=0.4 取0 0.4*2=0.8 取0 0.8*2=1.6 取1 。。。 最终得到的二进制数为0.00011001100110011...这样得到的是一个有无穷位数的二进制数字,而保存一个数据不可能用无穷的空间去存储,这就会导致计算机舍去后面的数值,从而我们得到的就是这个数值的近似值了。 而js的IEEE754标准也是如此,这导致了js会对一些小数取近似值,0.1和0.2转换成二进制都是无穷数,从而导致了0.1+0.2≠0.3。 <div class="tip inlineBlock success"> 解决该问题的方法:将小数变成整数计算,然后再换回小数,例如0.1+0.2=(0.1\*10+0.2\*10)/10 </div> Last modification:July 26, 2021 © Allow specification reprint Support Appreciate the author AliPayWeChat Like 如果觉得我的文章对你有用,请随意赞赏