首頁 > web前端 > js教程 > js中浮點型運算BUG的解決方法說明_javascript技巧

js中浮點型運算BUG的解決方法說明_javascript技巧

WBOY
發布: 2016-05-16 17:05:19
原創
1119 人瀏覽過

曾經專案用到過的,之前在網路上找到此程式碼,但在特定條件下除法和加法運算仍會出現BUG個人對此稍作最佳化

複製程式碼 程式碼如下:

//除法函數,用來得到精確的除法結果
//說明:javascript的除法結果會有誤差,在兩個浮點數相除的時候會比較明顯。這個函數會傳回較精確的除法結果。
//呼叫:accDiv(arg1,arg2)
//回傳值:arg1除以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 accMul((r1 / r2),pow(10, t2 - t1); }



複製程式碼 程式碼如下:
程式碼如下:


/乘法函數,用來得到精確的乘法結果
//說明:javascript的乘法結果會有誤差,在兩個浮點數相乘的時候會比較明顯。這個函數會傳回較精確的乘法結果。
//呼叫:accMul(arg1,arg2)
//回傳值:arg1乘以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)
}
複製程式碼

複製程式碼


程式碼如下>

//加法運算中階解
function accAdd(arg1, arg2) {  
    var r1, r2, m, c;
     var r1, r2, m, c;
    try.1 = . split(".")[1].length } catch (e) { r1 = 0 }
    try { r2 = arg2.toString().split(".")[1].length } catch (e) { r2 = 0 } 
    c = Math.abs(r1 - r2);  
    m = Math.pow(10, Math.max(r1, r2))  
 🎜>        var cm = Math.pow(10, c);  
       if (r1 > r ""));  
            arg2 = Number(arg2.toString().replace(".", "")) * cm;  
               arg1 = Number(arg1.toString().replace(". ", "")) * cm;  
            arg2 = Number(arg2.toString().replace(".", ""));        else {  
        arg1 = Number(arg1.toString().replace(".", ""));  
        arg2 = Number(arg2.toString().replace(".", "")); >    return accDiv((arg1 arg2),m);
}


相關標籤:
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新問題
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板