JS小数の計算精度を失います

理由:計算はバイナリ小数精度に変換されますが失われます 

例えば:間違っているどのように4.02×10カウントのN乗; FAQ 0.1 + 0.3 = 0.2!

処理:計算し、小数点変換

// 加法

関数addNum(B){ 
    
     VARのC、D、E。
    試す{ 
          C。( "")= a.toString()分割[1 ] .LENGTH。
    } キャッチ(F){ 
          C = 0 
    } 
      試み{ 
          D = b.toString()スプリット( "")[1 ] .LENGTH。
    } キャッチ(F){ 
          D = 0 ; 
    } 
      戻り E = Math.pow(10、Math.max(C、D))、(multiNum(E)+ multiNum(B、E))/ E。
} 
    
// 减法
    
関数subNum(B){
     VARC、D、E;
    試す{ 
         C。( "")= a.toString()分割[1 ] .LENGTH。
    } キャッチ(F){ 
          C = 0 
    } 
    試み{ 
        D = b.toString()スプリット( "")[1 ] .LENGTH。
    } キャッチ(F){ 
        D = 0 ; 
    } 
    戻り E = Math.pow(10、Math.max(C、D))、(multiNum(E) - multiNum(B、E))/ E。
} 
// 乘法

機能multiNum(B){
     VARの C = 0 
    D =  a.toString()、
    E = b.toString();
    試す{ 
        C + = d.split( "")[1 ] .LENGTH。
    } キャッチ(F){}
     試み{ 
        C + = e.split( "")[1 ] .LENGTH。
    } キャッチ(F){}
     を返す( " "d.replace("、 "))*番号(e.replace("。 """))/ Math.pow(10番号、C)。
} 

 // 除法

機能分割(B){
     VARの C、D、E = 0 
    F = 0 試す{ 
        E。( "")= a.toString()分割[1 ] .LENGTH。(G){}
     試み{ 
        F = b.toString()スプリット( "")[1 ] .LENGTH。
    } キャッチ(G){}
     戻り C =番号(a.toString()。(置換" "" "))、D =番号(b.toString()。(置き換えます"。 """))、この .mul(C / D、F Math.pow(10、 - e)参照)。
}

 

おすすめ

転載: www.cnblogs.com/zui1024/p/12557992.html