首頁  >  文章  >  web前端  >  js關於精確計算和數值格式化以及直接引js檔_javascript技巧

js關於精確計算和數值格式化以及直接引js檔_javascript技巧

WBOY
WBOY原創
2016-05-16 17:01:59894瀏覽
複製程式碼 程式碼如下:

(function () {
var calc = {
/*
函數,加法函數,用來得到精確的加法結果
說明:javascript的加法結果會有誤差,在兩個浮點數相加的時候會比較明顯。 (可以不傳此參數,如果不傳則不處理小數位數)
呼叫:Calc.Add(arg1,arg2,d)
傳回值:兩數相加的結果
*/
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;
},
/ *
函數:減法函數,用來得到精確的減法結果
說明:函數傳回較精確的減法結果。要保留的小數位數(可以不傳此參數,如果不傳則不處理小數位數
呼叫:Calc.Sub(arg1,arg2)
傳回值:兩數相減的結果
*/
Sub: function (arg1, arg2) {
return Calc.Add(arg1, -Number(arg2), arguments[2]);
},
/*
函數:乘法函數,用來得到精確的乘法結果
說明:函數傳回較精確的乘法結果。
參數:arg1:第一個乘數;arg2第二個乘數;d要保留的小數位數(可以不傳此參數,如果不傳則不處理小數位數)
呼叫:Calc .Mul(arg1,arg2)
傳回值:兩數相乘的結果
*/
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)));
},
/*
函數:除法函數,用來得到精確的除法結果
說明:函數傳回較精確的除法結果。
參數:arg1:除數;arg2被除數;d要保留的小數位數(可以不傳此參數,如果不傳則不處理小數位數)
呼叫:Calc.Div(arg1,arg2)
傳回值:arg1除於arg2的結果
*/
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)));
},
/*
將數值四捨五入後格式化.
@param num 數值(Number或String)
@param cent 要保留的小數位(Number)
@param isThousand 是否需要千分位0:不需要,1:需要(數值類型);
@return 格式的字串,如'1,234,567.45'
@type String
呼叫:Calc.FormatNumber(num, cent,isThousand)
*/
FormatNumber: function formatNumber(num,cent,isThousand){
num = num.toString().replace(/$|,/g,'');
if(isNaN(num))//檢查傳入數值為數值類型.
num = "0";
if(isNaN(cent))//確保傳入小數位為數值型數值.
cent = 0;
cent = parseInt(cent);
cent = Math.abs(cent);//求小數位數,確保為正整數.
if(isNaN(isThousand) )//確保傳入是否需要千分位為數值類型.
isThousand = 0;
isThousand = parseInt(isThousand);
if(isThousand isThousand = 0;
if(isThousand >=1) //確保傳入的數值只為0或1
isThousand = 1;
sign = (num == (num = Math.abs(num)));//取得符號(正/負數)
//Math.floor:傳回小於等於其數值參數的最大整數
num = Math.floor(num*Math.pow(10,cent) 0.50000000001);//把指定的小數位先轉換成整數.多餘的小數位四捨五入.
cents = num%Math.pow(10,cent); //求出小數位數值.
num = Math.floor(num/ Math.pow(10,cent)).toString();//求出整數位數值.
cents = cents.toString();//把小數位轉換成字串,以便求小數位長度.
while(cents.lengthcents = "0" cents;
}
if(isThousand == 0) //不需要千分位符.
return (((sign)?'':'-') num '.' cents);
//對整數部分進行千分位格式化.
for (var i = 0; i num = num.substring(0,num.length-(4*i 3)) ', '
num.substring(num.length-(4*i 3));
return (((sign)?'':'-') num '.' cents);
}
};
window.Calc = calc;
}());

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn