Heim  >  Artikel  >  Web-Frontend  >  Genaue Berechnung von js-Gleitkommazahlen

Genaue Berechnung von js-Gleitkommazahlen

一个新手
一个新手Original
2017-10-16 10:07:431858Durchsuche

//Divisionsfunktion, die verwendet wird, um genaue Divisionsergebnisse zu erhalten
//Erklärung: Das Divisionsergebnis von JavaScript weist Fehler auf, die bei der Division zweier Gleitkommazahlen offensichtlicher sind. Diese Funktion gibt ein genaueres Divisionsergebnis zurück.
//Aufruf: accp(arg1,arg2)
//Rückgabewert: das genaue Ergebnis der Division von arg1 durch arg2

function accp(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 (r1/r2)*pow(10,t2-t1);
    }
}

//Geben Number Durch das Hinzufügen einer p-Methode zum Typ wird der Aufruf komfortabler.
Number.prototype.p = function (arg){
return accp(this, arg);
}
//Multiplikationsfunktion, wird verwendet, um genaue Multiplikationsergebnisse zu erhalten
//Erklärung: Das Multiplikationsergebnis von JavaScript weist Fehler auf, die deutlicher sichtbar werden, wenn zwei Gleitkommazahlen multipliziert werden. Diese Funktion gibt ein genaueres Multiplikationsergebnis zurück.
//Aufruf: accMul(arg1,arg2)
//Rückgabewert: das genaue Ergebnis von arg1 multipliziert mit arg2

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);
}

//Geben Number Fügen Sie dem Typ eine mul-Methode hinzu, um den Aufruf zu vereinfachen.

Number.prototype.mul = function (arg){
    return accMul(arg, this);
};

//Add-Funktion, die verwendet wird, um genaue Additionsergebnisse zu erhalten
//Erklärung: Das Additionsergebnis von JavaScript weist Fehler auf und wird beim Addieren zweier Gleitkommazahlen offensichtlich verglichen . Diese Funktion gibt ein genaueres Additionsergebnis zurück.
//Aufruf: accAdd(arg1,arg2)
//Rückgabewert: das genaue Ergebnis von arg1 plus arg2

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 (arg1*m+arg2*m)/m;
}
//给Number类型增加一个add方法,调用起来更加方便。
Number.prototype.add = function (arg){
    return accAdd(arg,this);
}
//减法函数
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));
     //last modify by deeka
     //动态控制精度长度
     n=(r1>=r2)?r1:r2;
     return ((arg2*m-arg1*m)/m).toFixed(n);
}
///给number类增加一个sub方法,调用起来更加方便
Number.prototype.sub = function (arg){
    return accSub(arg,this);
}

Das obige ist der detaillierte Inhalt vonGenaue Berechnung von js-Gleitkommazahlen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn