JS中浮点数总结

       浮点数的运算在业务中是比较常见的,js浮点数运算会出现多位小数,如0.1+0.2 = 0.30000000000000004, 这是由于在运算的时候先把浮点数转化成二进制后进行运算,但是有的小数在二进制编码后出现无限循环,因而导致计算出现了误差,在其它编程语言中也有类似的问题。

处理方法如下:

1.保留2为位小数:

handleDecimals = function (num) {
    let re = /([0-9]+\.[0-9]{2})[0-9]*/;
    let newNum = num.toString().replace(re,"$1");
    return Number(newNum);
}

2.利用JavaScript 的toFixed(n) 方法,直接获取N 位小数,该方法是四舍五入的, 这种方法存在精确度问题,但基本上是可以使用;
   如 var num = 0.888888888....; num.toFixed(2) = 0.89;但有时候会有问题 如 1.005 toFixed(2)=1.00  0.005 toFixed(2)=0.01

3.如果知道确定需要运算数的最大有几位小数点 也可以直接先乘以10的位数再除, 如 (0.1*10+0.2*10)/10 = 0.3;

4.不确定小数点位数时: 可以先把数字转化为字符串类型再判断小数点后的位数 再用方法3进行操作,这里要注意加减乘除有点不一样。如:

value = num.toString(); 
if (value.indexOf('.') > 0) {
    length = value.split('.')[1].length;
}

   4.直接用第三方处理浮点数的库,帮你封装好,引入直接可以用。 如:number-precision

具体用哪种方法 根据自己业务场景来选择

你可能感兴趣的:(JavaScript)