欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

js加減乘除丟失精度問題解決方法

 更新時間:2014年05月16日 17:05:40   作者:  
在javascript中,帶小數(shù)的數(shù)據(jù)運算時總會出現(xiàn)好多位小數(shù).這是因為在javascript中浮點數(shù)的計算是以2進制計算的
在javascript中,當你使用小數(shù)進行加減乘除運算時,你會發(fā)現(xiàn),所得到的結(jié)果有時后面帶有長長的一段小數(shù),使運算變得復(fù)雜,并且影響計算結(jié)果。上網(wǎng)查詢了一下原因,大致如下:在javascript中,帶小數(shù)的數(shù)據(jù)運算時總會出現(xiàn)好多位小數(shù).這是因為在javascript中浮點數(shù)的計算是以2進制計算的。
復(fù)制代碼 代碼如下:

/**
* 加法運算,避免數(shù)據(jù)相加小數(shù)點后產(chǎn)生多位數(shù)和計算精度損失。
*
* @param num1加數(shù)1 | num2加數(shù)2
*/
function numAdd(num1, num2) {
var baseNum, baseNum1, baseNum2;
try {
baseNum1 = num1.toString().split(".")[1].length;
} catch (e) {
baseNum1 = 0;
}
try {
baseNum2 = num2.toString().split(".")[1].length;
} catch (e) {
baseNum2 = 0;
}
baseNum = Math.pow(10, Math.max(baseNum1, baseNum2));
return (num1 * baseNum + num2 * baseNum) / baseNum;
};
/**
* 加法運算,避免數(shù)據(jù)相減小數(shù)點后產(chǎn)生多位數(shù)和計算精度損失。
*
* @param num1被減數(shù) | num2減數(shù)
*/
function numSub(num1, num2) {
var baseNum, baseNum1, baseNum2;
var precision;// 精度
try {
baseNum1 = num1.toString().split(".")[1].length;
} catch (e) {
baseNum1 = 0;
}
try {
baseNum2 = num2.toString().split(".")[1].length;
} catch (e) {
baseNum2 = 0;
}
baseNum = Math.pow(10, Math.max(baseNum1, baseNum2));
precision = (baseNum1 >= baseNum2) ? baseNum1 : baseNum2;
return ((num1 * baseNum - num2 * baseNum) / baseNum).toFixed(precision);
};
/**
* 乘法運算,避免數(shù)據(jù)相乘小數(shù)點后產(chǎn)生多位數(shù)和計算精度損失。
*
* @param num1被乘數(shù) | num2乘數(shù)
*/
function numMulti(num1, num2) {
var baseNum = 0;
try {
baseNum += num1.toString().split(".")[1].length;
} catch (e) {
}
try {
baseNum += num2.toString().split(".")[1].length;
} catch (e) {
}
return Number(num1.toString().replace(".", "")) * Number(num2.toString().replace(".", "")) / Math.pow(10, baseNum);
};
/**
* 除法運算,避免數(shù)據(jù)相除小數(shù)點后產(chǎn)生多位數(shù)和計算精度損失。
*
* @param num1被除數(shù) | num2除數(shù)
*/
function numDiv(num1, num2) {
var baseNum1 = 0, baseNum2 = 0;
var baseNum3, baseNum4;
try {
baseNum1 = num1.toString().split(".")[1].length;
} catch (e) {
baseNum1 = 0;
}
try {
baseNum2 = num2.toString().split(".")[1].length;
} catch (e) {
baseNum2 = 0;
}
with (Math) {
baseNum3 = Number(num1.toString().replace(".", ""));
baseNum4 = Number(num2.toString().replace(".", ""));
return (baseNum3 / baseNum4) * pow(10, baseNum2 - baseNum1);
}
};

相關(guān)文章

  • javaScript產(chǎn)生隨機數(shù)的用法小結(jié)

    javaScript產(chǎn)生隨機數(shù)的用法小結(jié)

    這篇文章主要介紹了javaScript產(chǎn)生隨機數(shù)的用法小結(jié),包括JavaScript Math.random()內(nèi)置函數(shù) ,Js 隨機數(shù)產(chǎn)生6位數(shù)字的代碼,需要的朋友可以參考下
    2018-04-04
  • uni-app低成本封裝一個取色器組件的簡單方法

    uni-app低成本封裝一個取色器組件的簡單方法

    最近想實現(xiàn)一個uniapp取色器組件,實現(xiàn)后發(fā)現(xiàn)效果還不錯,下面這篇文章主要給大家介紹了關(guān)于uni-app低成本封裝一個取色器組件的相關(guān)資料,文中通過圖文介紹的介紹的非常詳細,需要的朋友可以參考下
    2023-02-02
  • JavaScript 常見安全漏洞和自動化檢測技術(shù)

    JavaScript 常見安全漏洞和自動化檢測技術(shù)

    js安全漏洞目前存在較大的技術(shù)難題,本文結(jié)合案例給大家詳解JavaScript 常見安全漏洞和自動化檢測技術(shù),需要的朋友可以參考下
    2015-08-08
  • JavaScript門面模式詳解

    JavaScript門面模式詳解

    這篇文章主要為大家詳細介紹了JavaScript門面模式的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-10-10
  • webpack引入eslint配置詳解

    webpack引入eslint配置詳解

    本篇文章主要介紹了webpack引入eslint配置詳解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-01-01
  • Vue項目vscode 安裝eslint插件的方法(代碼自動修復(fù))

    Vue項目vscode 安裝eslint插件的方法(代碼自動修復(fù))

    這篇文章主要介紹了Vue項目vscode 安裝eslint插件的方法 代碼自動修復(fù),需要的朋友可以參考下
    2020-04-04
  • JS控制按鈕10秒鐘后可用的方法

    JS控制按鈕10秒鐘后可用的方法

    這篇文章主要介紹了JS控制按鈕10秒鐘后可用的方法,涉及JavaScript基于時間函數(shù)控制頁面元素樣式動態(tài)變換的技巧,需要的朋友可以參考下
    2015-12-12
  • js復(fù)制文本到粘貼板(Clipboard.writeText())

    js復(fù)制文本到粘貼板(Clipboard.writeText())

    這篇文章主要介紹了js復(fù)制文本到粘貼板(Clipboard.writeText()),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • js中鍵盤事件實例簡析

    js中鍵盤事件實例簡析

    這篇文章主要介紹了js中鍵盤事件,以一個較為簡單的實例形式分析了js響應(yīng)鍵盤事件的操作技巧,需要的朋友可以參考下
    2015-01-01
  • layui上傳圖片到服務(wù)器的非項目目錄下的方法

    layui上傳圖片到服務(wù)器的非項目目錄下的方法

    今天小編就為大家分享一篇layui上傳圖片到服務(wù)器的非項目目錄下的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-09-09

最新評論