JS 0.1+0.2≠0.3

214 阅读1分钟

为什么在js里0.1+0.2≠0.3

浮点数计算是不精确的,0.1+0.2的实际返回值为: 0.1+0.2=0.30000000000000004
计算机内
0.1转换成二进制是0.0001100110011001100(1100)的无限循环
0.2转换成二进制为0.0011001100110011(0011)的无限循环

又知 在JS的number类型中,二进制小数的有小数只有52位 0-51 所以在js中

console.log(0.1.toString('2'));

得0.0001100110011001100110011001100110011001100110011001101

console.log(0.2.toString('2'));

得0.001100110011001100110011001100110011001100110011001101

将两个值进行尾数部位相加

= 0.0100110011001100110011001100110011001100110011001100 转换为17位10进制数为0.30000000000000004

如何使0.1+0.2==0.3

console.log(parseFloat((0.1 + 0.2).toFixed(10)));

shu.png