1、问题描述:
两个有限的数字相减得到小数点后面类似00000000000001,69999999999999之类的数。像下面这样0.1 + 0.2没有返回0.3,反而返回0.30000000000000004。原因是因为计算机把数字转成二进制计算再将计算转成十进制的这个过程出现的计算误差。不仅仅是JavaScript会出现这个问题,其他语言也会有。不过解决思路都是一样的
0.1 + 0.2 => 0.30000000000000004
2、问题解决
下面是用JavaScript方法解决,其他语言的解决思路都是一样的
(1)保留4位小数,小数不足4位不会用0补齐
0.1 + 0.2 => 0.30000000000000004 //调整成 parseInt((0.1 + 0.2)*10000)/parseInt(10000) => 0.3
(2)保留四舍五入后的5位小数,小数不足5位用0补齐
0.012 * 0.06 => 0.0007199999999999999 //调整成 parseInt(0.012 * 0.06*1000000)/parseInt(1000000).toFixed(5) => 0.0007