理由:計算はバイナリ小数精度に変換されますが失われます
例えば:間違っているどのように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)参照)。 }