Es probable que ocurran problemas de precisión al realizar operaciones de punto flotante en js

Es probable que ocurran problemas de precisión al realizar operaciones de punto flotante en js

1. Función de división

//Explicación: El resultado de la división de javascript tendrá errores, que serán más evidentes al dividir dos números de punto flotante. Esta función devuelve un resultado de división más preciso.
//Llamar: accDiv(arg1,arg2)
//Valor devuelto: el resultado exacto de dividir arg1 por arg2

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 (r1/r2)*pow(10,t2-t1);   //---整数相除 在乘上10的平方  小数点的长度
    }
}

2. Función de multiplicación

//Descripción: habrá errores en el resultado de la multiplicación de javascript, que será más evidente al multiplicar dos números de punto flotante. Esta función devuelve un resultado de multiplicación más preciso.
//llamada: accMul(arg1,arg2)
//valor devuelto: el resultado exacto de multiplicar arg1 por 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)
}

**

3. Función de adición

**
//Explicación: Habrá errores en el resultado de la suma de javascript, que será más evidente al sumar dos números de coma flotante.
Esta función devuelve un resultado de suma más preciso.
//llamar: accAdd(arg1,arg2)
//valor devuelto: arg1 más el resultado exacto de 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
}

4. Función de resta

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 ((arg1*m-arg2*m)/m).toFixed(n);
}

Supongo que te gusta

Origin blog.csdn.net/qq_41842461/article/details/128799375
Recomendado
Clasificación