经典问题
console.log(0.1 + 0.2); //0.30000000000000004
出现原因:
js存储数值采用的是IEEE754标准中得64位双精度法,都知道是用二进制来进行存储,但在IEEE754标准中,将这64位分成了三个部分,分别是符号位,指数位,有效位,其中符号位最简单,0表示正数,1表示负数,假如有一个二进制11000,不可能直接这样存储,需要表示位1.1 ✖ 2^4,这个4就会存储在指数位,1.1就会存储在有效位
现在来看0.1在计算机中如何存储
如上图,小数会✖2,直到小数位变为0停止,但是0.1小数位无限循环了,但是有效位只有52位,所以计算机只能取一个近似得数值,0.2同理,所以0.1 + 0.2相加以后再转化为十进制就已经不是纯正得0.3了