国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

js關于精確計算和數值格式化以及直接引js文件

2024-05-06 15:59:57
字體:
來源:轉載
供稿:網友
本文為大家介紹下關于精確計算和數值格式化以及直接引js文件,大家可以學習下

復制代碼 代碼如下:


(function () {
var calc = {
/*
函數,加法函數,用來得到精確的加法結果
說明:javascript的加法結果會有誤差,在兩個浮點數相加的時候會比較明顯。這個函數返回較為精確的加法結果。
參數:arg1:第一個加數;arg2第二個加數;d要保留的小數位數(可以不傳此參數,如果不傳則不處理小數位數)
調用: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;
},
/*
函數:減法函數,用來得到精確的減法結果
說明:函數返回較為精確的減法結果。
參數:arg1:第一個加數;arg2第二個加數;d要保留的小數位數(可以不傳此參數,如果不傳則不處理小數位數
調用: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 < 0)
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.length<cent){//補足小數位到指定的位數.
cents = "0" + cents;
}
if(isThousand == 0) //不需要千分位符.
return (((sign)?'':'-') + num + '.' + cents);
//對整數部分進行千分位格式化.
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;
}());

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 岳池县| 西藏| 牟定县| 南阳市| 莱西市| 衡阳市| 红河县| 龙山县| 四平市| 汾西县| 内乡县| 全州县| 南雄市| 区。| 古田县| 合水县| 绥滨县| 望奎县| 香河县| 图木舒克市| 米林县| 鄢陵县| 家居| 青铜峡市| 龙里县| 铁岭市| 广平县| 昭觉县| 永年县| 浙江省| 双流县| 玉林市| 双峰县| 富平县| 芒康县| 阳东县| 游戏| 潼南县| 同江市| 星子县| 沂水县|