js关于精确计算和数值格式化以及直接引js文件


Posted in Javascript onJanuary 28, 2014
(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; 
}());
Javascript 相关文章推荐
仅Firefox中链接A无法实现模拟点击以触发其默认行为
Jul 31 Javascript
js 通用javascript函数库整理
Aug 14 Javascript
从阶乘函数对比Javascript和C#的异同
May 31 Javascript
php跨域调用json的例子
Nov 13 Javascript
JS控制输入框内字符串长度
May 21 Javascript
javascript常见数字进制转换实例分析
Apr 21 Javascript
JavaScript中解决多浏览器兼容性23个问题的快速解决方法
May 19 Javascript
终于实现了!精彩的jquery弹幕效果
Jul 18 Javascript
js智能获取浏览器版本UA信息的方法
Aug 08 Javascript
JavaScript实现水平进度条拖拽效果
Jan 18 Javascript
create-react-app中添加less支持的实现
Nov 15 Javascript
JavaScript 判断浏览器是否是IE
Feb 19 Javascript
键盘上一张下一张兼容IE/google/firefox等浏览器
Jan 28 #Javascript
调用innerHTML之后onclick失效问题的解决方法
Jan 28 #Javascript
JS判断两个时间大小的示例代码
Jan 28 #Javascript
js jquery ajax的几种用法总结(及优缺点介绍)
Jan 28 #Javascript
js中哈希表的几种用法总结
Jan 28 #Javascript
js日期对象兼容性的处理方法
Jan 28 #Javascript
JS cookie中文乱码解决方法
Jan 28 #Javascript
You might like
php文件怎么打开 如何执行php文件
2011/12/21 PHP
自己在做项目过程中学到的PHP知识收集
2012/08/20 PHP
深入PHP获取随机数字和字母的方法详解
2013/06/06 PHP
PHP实现HTML页面静态化的方法
2015/11/04 PHP
YII Framework框架教程之使用YIIC快速创建YII应用详解
2016/03/15 PHP
关于Blog顶部的滚动导航条代码
2006/09/25 Javascript
jquery text,radio,checkbox,select操作实现代码
2009/07/09 Javascript
Mootools 1.2教程 同时进行多个形变动画
2009/09/15 Javascript
javascript面向对象之二 命名空间
2011/02/08 Javascript
jQuery效果 slideToggle() 方法(在隐藏和显示之间切换)
2011/06/28 Javascript
JavaScript中json使用自己总结
2013/08/13 Javascript
通过length属性判断jquery对象是否存在
2013/10/18 Javascript
简单的两种Extjs formpanel加载数据的方式
2013/11/09 Javascript
基于Jquery+Ajax+Json实现分页显示附效果图
2014/07/30 Javascript
JavaScript编写推箱子游戏
2015/07/07 Javascript
Bootstrap框架动态生成Web页面文章内目录的方法
2016/05/12 Javascript
JS封装的自动创建表格的实现代码
2016/06/15 Javascript
将json转换成struts参数的方法
2016/11/08 Javascript
jquery中绑定事件的异同
2017/02/28 Javascript
Node.js中你不可不精的Stream(流)
2018/06/08 Javascript
ionic grid(栅格)九宫格制作详解
2018/06/30 Javascript
小程序自定义组件实现城市选择功能
2018/07/18 Javascript
对vuejs的v-for遍历、v-bind动态改变值、v-if进行判断的实例讲解
2018/08/27 Javascript
结合axios对项目中的api请求进行封装操作
2020/09/21 Javascript
python在文本开头插入一行的实例
2018/05/02 Python
Python尾递归优化实现代码及原理详解
2020/10/09 Python
html5使用Canvas绘图的使用方法
2017/11/21 HTML / CSS
如何理解transaction事务的概念
2015/05/27 面试题
工商管理应届生求职信
2013/10/07 职场文书
联欢晚会主持词
2014/03/25 职场文书
创建绿色学校先进个人材料
2014/08/20 职场文书
2015年八一建军节慰问信
2015/03/23 职场文书
学校德育工作总结2015
2015/05/11 职场文书
离婚起诉书范文2015
2015/05/19 职场文书
2015年科学教研组工作总结
2015/07/22 职场文书
MySQL解决Navicat设置默认字符串时的报错问题
2022/06/16 MySQL