总结
原因是精度丢失。在JS内部所有的计算都是以二进制方式计算的 0.1+0.2的计算首先需要将十进制转换为二进制,在现代浏览器中是用浮点数形式的二进制来存储二进制,所以还要把上面所转化的二进制转成浮点数形式的二进制 ,最终发生了两次精度丢失。
- 0.1 和 0.2 转成双精度二进制浮点数时,由于二进制浮点数的小数位只能存储52位,导致小数点后第53位的数要进行为1则进1为0则舍去的操作,从而造成一次精度丢失
- 0.1 和 0.2 转成二进制浮点数后,二进制浮点数相加的过程中,小数位相加导致小数位多出了一位,又要让第53位的数进行为1则进1为0则舍去的操作,又造成一次精度丢失
最终导致 0.1+0.2 不等于0.3 等于0.30000000000000004。