js關于精確計算和數(shù)值格式化以及直接引js文件
更新時間:2014年01月28日 15:18:07 作者:
本文為大家介紹下關于精確計算和數(shù)值格式化以及直接引js文件,大家可以學習下
復制代碼 代碼如下:
(function () {
var calc = {
/*
函數(shù),加法函數(shù),用來得到精確的加法結(jié)果
說明:javascript的加法結(jié)果會有誤差,在兩個浮點數(shù)相加的時候會比較明顯。這個函數(shù)返回較為精確的加法結(jié)果。
參數(shù):arg1:第一個加數(shù);arg2第二個加數(shù);d要保留的小數(shù)位數(shù)(可以不傳此參數(shù),如果不傳則不處理小數(shù)位數(shù))
調(diào)用:Calc.Add(arg1,arg2,d)
返回值:兩數(shù)相加的結(jié)果
*/
Add: function (arg1, arg2,d) {
arg1 = arg1.toString(), arg2 = arg2.toString();
var arg1Arr = arg1.split("."), arg2Arr = arg2.split("."), d1 = arg1Arr.length == 2 ? arg1Arr[1] : "", d2 = arg2Arr.length == 2 ? arg2Arr[1] : "";
var maxLen = Math.max(d1.length, d2.length);
var m = Math.pow(10, maxLen);
var result = Number(((arg1 * m + arg2 * m) / m).toFixed(maxLen));
var d = arguments[2];
return typeof d === "number" ? Number((result).toFixed(d)) : result;
},
/*
函數(shù):減法函數(shù),用來得到精確的減法結(jié)果
說明:函數(shù)返回較為精確的減法結(jié)果。
參數(shù):arg1:第一個加數(shù);arg2第二個加數(shù);d要保留的小數(shù)位數(shù)(可以不傳此參數(shù),如果不傳則不處理小數(shù)位數(shù)
調(diào)用:Calc.Sub(arg1,arg2)
返回值:兩數(shù)相減的結(jié)果
*/
Sub: function (arg1, arg2) {
return Calc.Add(arg1, -Number(arg2), arguments[2]);
},
/*
函數(shù):乘法函數(shù),用來得到精確的乘法結(jié)果
說明:函數(shù)返回較為精確的乘法結(jié)果。
參數(shù):arg1:第一個乘數(shù);arg2第二個乘數(shù);d要保留的小數(shù)位數(shù)(可以不傳此參數(shù),如果不傳則不處理小數(shù)位數(shù))
調(diào)用:Calc.Mul(arg1,arg2)
返回值:兩數(shù)相乘的結(jié)果
*/
Mul: function (arg1, arg2) {
var r1 = arg1.toString(), r2 = arg2.toString(), m, resultVal, d = arguments[2];
m = (r1.split(".")[1] ? r1.split(".")[1].length : 0) + (r2.split(".")[1] ? r2.split(".")[1].length : 0);
resultVal = Number(r1.replace(".", "")) * Number(r2.replace(".", "")) / Math.pow(10, m);
return typeof d !== "number" ? Number(resultVal) : Number(resultVal.toFixed(parseInt(d)));
},
/*
函數(shù):除法函數(shù),用來得到精確的除法結(jié)果
說明:函數(shù)返回較為精確的除法結(jié)果。
參數(shù):arg1:除數(shù);arg2被除數(shù);d要保留的小數(shù)位數(shù)(可以不傳此參數(shù),如果不傳則不處理小數(shù)位數(shù))
調(diào)用:Calc.Div(arg1,arg2)
返回值:arg1除于arg2的結(jié)果
*/
Div: function (arg1, arg2) {
var r1 = arg1.toString(), r2 = arg2.toString(), m, resultVal, d = arguments[2];
m = (r2.split(".")[1] ? r2.split(".")[1].length : 0) - (r1.split(".")[1] ? r1.split(".")[1].length : 0);
resultVal = Number(r1.replace(".", "")) / Number(r2.replace(".", "")) * Math.pow(10, m);
return typeof d !== "number" ? Number(resultVal) : Number(resultVal.toFixed(parseInt(d)));
},
/*
將數(shù)值四舍五入后格式化.
@param num 數(shù)值(Number或者String)
@param cent 要保留的小數(shù)位(Number)
@param isThousand 是否需要千分位 0:不需要,1:需要(數(shù)值類型);
@return 格式的字符串,如'1,234,567.45'
@type String
調(diào)用:Calc.FormatNumber(num,cent,isThousand)
*/
FormatNumber: function formatNumber(num,cent,isThousand){
num = num.toString().replace(/\$|\,/g,'');
if(isNaN(num))//檢查傳入數(shù)值為數(shù)值類型.
num = "0";
if(isNaN(cent))//確保傳入小數(shù)位為數(shù)值型數(shù)值.
cent = 0;
cent = parseInt(cent);
cent = Math.abs(cent);//求出小數(shù)位數(shù),確保為正整數(shù).
if(isNaN(isThousand))//確保傳入是否需要千分位為數(shù)值類型.
isThousand = 0;
isThousand = parseInt(isThousand);
if(isThousand < 0)
isThousand = 0;
if(isThousand >=1) //確保傳入的數(shù)值只為0或1
isThousand = 1;
sign = (num == (num = Math.abs(num)));//獲取符號(正/負數(shù))
//Math.floor:返回小于等于其數(shù)值參數(shù)的最大整數(shù)
num = Math.floor(num*Math.pow(10,cent)+0.50000000001);//把指定的小數(shù)位先轉(zhuǎn)換成整數(shù).多余的小數(shù)位四舍五入.
cents = num%Math.pow(10,cent); //求出小數(shù)位數(shù)值.
num = Math.floor(num/Math.pow(10,cent)).toString();//求出整數(shù)位數(shù)值.
cents = cents.toString();//把小數(shù)位轉(zhuǎn)換成字符串,以便求小數(shù)位長度.
while(cents.length<cent){//補足小數(shù)位到指定的位數(shù).
cents = "0" + cents;
}
if(isThousand == 0) //不需要千分位符.
return (((sign)?'':'-') + num + '.' + cents);
//對整數(shù)部分進行千分位格式化.
for (var i = 0; i < Math.floor((num.length-(1+i))/3); i++)
num = num.substring(0,num.length-(4*i+3))+','+
num.substring(num.length-(4*i+3));
return (((sign)?'':'-') + num + '.' + cents);
}
};
window.Calc = calc;
}());
相關文章
layer.open屬性詳解及l(fā)ayer.open彈出框使用post方法舉例
這篇文章主要給大家介紹了關于layer.open屬性詳解及l(fā)ayer.open彈出框使用post方法的相關資料,最近接觸到layer彈窗,感覺彈窗功能異常強大,真的很方便,所以記錄下來,需要的朋友可以參考下2023-12-12
基于JavaScript實現(xiàn)div層跟隨滾動條滑動
項目需求是這樣的:在一個頁面放2個懸浮框,懸浮框隨頁面的上下滾動有上下波動的效果,最終固定在同一位置,下面通過本文給大家分享基于JavaScript實現(xiàn)div層跟隨滾動條滑動的相關資料,對js div跟隨滾動條滑動相關知識感興趣的朋友一起學習吧2016-01-01
微信小程序防止多次點擊跳轉(zhuǎn)(函數(shù)節(jié)流)
這篇文章主要介紹了微信小程序防止多次點擊跳轉(zhuǎn)問題(函數(shù)節(jié)流),本文給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下2019-09-09

