js關(guān)于精確計算和數(shù)值格式化以及直接引js文件
更新時間:2014年01月28日 15:18:07 作者:
本文為大家介紹下關(guān)于精確計算和數(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;
}());
相關(guān)文章
在ASP.NET MVC項目中使用RequireJS庫的用法示例
這篇文章主要介紹了在ASP.NET MVC項目中使用RequireJS的用法示例,文中主要講解了網(wǎng)站項目的一些基本目錄結(jié)構(gòu)思想,并給出了一個半自動壓縮的例子,的朋友可以參考下2016-02-02詳解Webpack如何引入CDN鏈接來優(yōu)化編譯后的體積
這篇文章主要介紹了詳解Webpack如何引入CDN鏈接來優(yōu)化編譯后的體積,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-06-06用JS實現(xiàn)網(wǎng)頁元素陰影效果的研究總結(jié)
用JS實現(xiàn)網(wǎng)頁元素陰影效果的研究總結(jié)...2007-08-08