美文网首页
解决js浮点数运算不准确的函数

解决js浮点数运算不准确的函数

作者: Mr无愧于心 | 来源:发表于2019-01-07 10:38 被阅读0次

    针对:js在浮点数运算时会出现多位小数的不准确结果

    1. 乘法运算函数
    • 原理:给两个数计算小数点后边的位数和M,在清除小数点,相乘后在开M方。(除法一样)
    function accMul(arg1,arg2){
        var m=0,s1=arg1.toString(),s2=arg2.toString();
        try{m+=s1.split(".")[1].length}catch(e){}
        try{m+=s2.split(".")[1].length}catch(e){}
        console.log((Number(s1.replace(".",""))*Number(s2.replace(".",""))/Math.pow(10,m)).toFixed(2))
        return (Number(s1.replace(".",""))*Number(s2.replace(".",""))/Math.pow(10,m)).toFixed(2);
    }
    

    减法运算函数

    • 原理:取小数最多的那个数的小数点位数M,两个数分别乘以10的M次方,做差后在除以M(加法一样)
    function accSub(arg1, arg2) {
        if (isNaN(arg1)) {
            arg1 = 0;
        }
        if (isNaN(arg2)) {
            arg2 = 0;
        }
        arg1 = Number(arg1);
        arg2 = Number(arg2);
    
        var r1, r2, m, n;
        try {
            r1 = arg1.toString().split(".")[1].length;
        }
        catch (e) {
            r1 = 0;
        }
        try {
            r2 = arg2.toString().split(".")[1].length;
        }
        catch (e) {
            r2 = 0;
        }
        m = Math.pow(10, Math.max(r1, r2));  //动态控制精度长度
        n = (r1 >= r2) ? r1 : r2;
        return ((arg1 * m - arg2 * m) / m).toFixed(n);
    }
    

    相关文章

      网友评论

          本文标题:解决js浮点数运算不准确的函数

          本文链接:https://www.haomeiwen.com/subject/sdrznftx.html