美文网首页
js计算精度误差解决方案

js计算精度误差解决方案

作者: JackfengGG | 来源:发表于2017-05-14 17:56 被阅读392次

小数计算误差

  1. 先乘以小数点位数,计算后再除以位数
  2. 转字符串
//加法
function accAdd(arg1,arg2){
    var r1,r2,m;
    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))
    return (Math.round(arg1*m)+Math.round(arg2*m))/m
}
//减法
function accSub(arg1,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);
}
//乘法
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){}
    return Number(s1.replace(".",""))*Number(s2.replace(".",""))/Math.pow(10,m)
}
//除法
function accDiv(arg1,arg2){
    var t1=0,t2=0,r1,r2;
    try{t1=arg1.toString().split(".")[1].length}catch(e){}
    try{t2=arg2.toString().split(".")[1].length}catch(e){}
    with(Math){
        r1=Number(arg1.toString().replace(".",""))
        r2=Number(arg2.toString().replace(".",""))
        return accMul((r1/r2),pow(10,t2-t1));
    }
}

toFixed() xx.5误差

//toFixed精度解决
Number.prototype.toFixed = function(s) {
    var changenum=(parseInt(this * Math.pow( 10, s ) + 0.5)/ Math.pow( 10, s )).toString();
    var index=changenum.indexOf(".");
    if(index<0&&s>0){
        changenum=changenum+".";
        for(i=0;i<s;i++){
            changenum=changenum+"0";
        }

    }else {
        index=changenum.length-index;
        for(i=0;i<(s-index)+1;i++){
            changenum=changenum+"0";
        }

    }
    return changenum;
}

相关文章

  • js计算精度误差解决方案

    小数计算误差 先乘以小数点位数,计算后再除以位数 转字符串 toFixed() xx.5误差

  • js精度问题

    关于js浮点数计算精度不准确问题的解决办法 今天在计算商品价格的时候再次遇到js浮点数计算出现误差的问题,以前就一...

  • Javascript常见问题(二)

    1. js舍入误差 解决方案:方案1. parseFloat((0.1 + 0.2).toFiexed(2)) ...

  • 备忘

    1、js中解决数字计算精度问题,math.js bignumber. math.js https://blog.c...

  • iOS 浮点数的精确计算和四舍五入问题

    iOS开发中,使用浮点数(float,double)类型运算需要注意计算精度的问题。即使只是两位小数,也会出现误差...

  • Task03

    一 过拟合与欠拟合及其解决方案 1 训练误差与泛化误差 训练误差:在训练集上的数据误差; 泛化误差:在其他任意数据...

  • iOS NSDecimalNumber货币计算

    在iOS开发中,遇到和货币价格计算相关的,对计算精度要求比较高。使用float类型运算,经常出现误差。为了解决这种...

  • NSDecimalNumber

    在iOS开发中,进场遇到货币价格相关的计算,这是我们需要注意计算精度的问题。使用float类型运算,经常出现误差,...

  • iOS中NSDecimalNumber使用

    在iOS开发中,经常遇到和货币价格计算相关的,这时就需要注意计算精度的问题。使用float类型运算,经常出现误差。...

  • 第二次打卡 Task03

    一、过拟合、欠拟合及其解决方案 训练误差(training error)和泛化误差(generalization ...

网友评论

      本文标题:js计算精度误差解决方案

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