js關(guān)于精確計(jì)算和數(shù)值格式化以及直接引js文件
更新時(shí)間:2014年01月28日 15:18:07 作者:
本文為大家介紹下關(guān)于精確計(jì)算和數(shù)值格式化以及直接引js文件,大家可以學(xué)習(xí)下
復(fù)制代碼 代碼如下:
(function () {
var calc = {
/*
函數(shù),加法函數(shù),用來(lái)得到精確的加法結(jié)果
說(shuō)明:javascript的加法結(jié)果會(huì)有誤差,在兩個(gè)浮點(diǎn)數(shù)相加的時(shí)候會(huì)比較明顯。這個(gè)函數(shù)返回較為精確的加法結(jié)果。
參數(shù):arg1:第一個(gè)加數(shù);arg2第二個(gè)加數(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ù),用來(lái)得到精確的減法結(jié)果
說(shuō)明:函數(shù)返回較為精確的減法結(jié)果。
參數(shù):arg1:第一個(gè)加數(shù);arg2第二個(gè)加數(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ù),用來(lái)得到精確的乘法結(jié)果
說(shuō)明:函數(shù)返回較為精確的乘法結(jié)果。
參數(shù):arg1:第一個(gè)乘數(shù);arg2第二個(gè)乘數(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ù),用來(lái)得到精確的除法結(jié)果
說(shuō)明:函數(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)));//獲取符號(hào)(正/負(fù)數(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ù)位長(zhǎng)度.
while(cents.length<cent){//補(bǔ)足小數(shù)位到指定的位數(shù).
cents = "0" + cents;
}
if(isThousand == 0) //不需要千分位符.
return (((sign)?'':'-') + num + '.' + cents);
//對(duì)整數(shù)部分進(jìn)行千分位格式化.
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;
}());
您可能感興趣的文章:
- Javascript Math ceil()、floor()、round()三個(gè)函數(shù)的區(qū)別
- 使用js Math.random()函數(shù)生成n到m間的隨機(jī)數(shù)字
- JavaScript Math.floor方法(對(duì)數(shù)值向下取整)
- 介紹JavaScript中Math.abs()方法的使用
- Javascript四舍五入Math.round()與Math.pow()使用介紹
- js Math 對(duì)象的方法
- js中精確計(jì)算加法和減法示例
- js浮點(diǎn)數(shù)精確計(jì)算(加、減、乘、除)
- JavaScript使用math.js進(jìn)行精確計(jì)算操作示例
相關(guān)文章
分享幾種比較簡(jiǎn)單實(shí)用的JavaScript tabel切換
這篇文章主要分享幾種比較簡(jiǎn)單實(shí)用的JavaScript tabel切換 的相關(guān)資料,需要的朋友可以參考下2015-12-12
JS中生成隨機(jī)數(shù)的用法及相關(guān)函數(shù)
這篇文章主要為大家介紹了JS中生成隨機(jī)數(shù)的用法,為大家提供了相關(guān)函數(shù)的使用方法,感興趣的朋友可以參考一下2016-01-01
如何在uni-app使用微軟的文字轉(zhuǎn)語(yǔ)音服務(wù)
有了語(yǔ)音識(shí)別,交流就會(huì)變得很簡(jiǎn)單,下面這篇文章主要給大家介紹了關(guān)于如何在uni-app使用微軟的文字轉(zhuǎn)語(yǔ)音服務(wù)的相關(guān)資料,需要的朋友可以參考下2022-06-06
layer.open屬性詳解及l(fā)ayer.open彈出框使用post方法舉例
這篇文章主要給大家介紹了關(guān)于layer.open屬性詳解及l(fā)ayer.open彈出框使用post方法的相關(guān)資料,最近接觸到layer彈窗,感覺彈窗功能異常強(qiáng)大,真的很方便,所以記錄下來(lái),需要的朋友可以參考下2023-12-12
基于JavaScript實(shí)現(xiàn)div層跟隨滾動(dòng)條滑動(dòng)
項(xiàng)目需求是這樣的:在一個(gè)頁(yè)面放2個(gè)懸浮框,懸浮框隨頁(yè)面的上下滾動(dòng)有上下波動(dòng)的效果,最終固定在同一位置,下面通過(guò)本文給大家分享基于JavaScript實(shí)現(xiàn)div層跟隨滾動(dòng)條滑動(dòng)的相關(guān)資料,對(duì)js div跟隨滾動(dòng)條滑動(dòng)相關(guān)知識(shí)感興趣的朋友一起學(xué)習(xí)吧2016-01-01
微信小程序swiper實(shí)現(xiàn)文字縱向輪播提示效果
這篇文章主要介紹了微信小程序swiper實(shí)現(xiàn)文字縱向輪播提示效果,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-01-01
微信小程序防止多次點(diǎn)擊跳轉(zhuǎn)(函數(shù)節(jié)流)
這篇文章主要介紹了微信小程序防止多次點(diǎn)擊跳轉(zhuǎn)問題(函數(shù)節(jié)流),本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-09-09
JS刪除數(shù)組中某個(gè)元素的四種方式總結(jié)
js刪除指定元素方法有很多,下面這篇文章主要給大家介紹了關(guān)于JS刪除數(shù)組中某個(gè)元素的四種方式,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-02-02

