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 相关文章推荐
jQuery代码优化 事件委托篇
Nov 01 Javascript
JQuery Mobile 弹出式登录框的实现方法
May 28 Javascript
ECMAScript6快速入手攻略
Jul 18 Javascript
js捕捉键盘事件和按键键值的方法
Oct 10 Javascript
AugularJS从入门到实践(必看篇)
Jul 10 Javascript
薪资那么高的Web前端必看书单
Oct 13 Javascript
web前端开发中常见的多列布局解决方案整理(一定要看)
Oct 15 Javascript
vue表单自定义校验规则介绍
Aug 28 Javascript
vueJs实现DOM加载完之后自动下拉到底部的实例代码
Aug 31 Javascript
vue.js实现三级菜单效果
Oct 19 Javascript
小程序中设置缓存过期的实现方法
Jan 14 Javascript
Vue 中使用lodash对事件进行防抖和节流操作
Jul 26 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
ThinkPHP访问不存在的模块跳转到404页面的方法
2014/06/19 PHP
php多线程并发实现方法
2016/09/30 PHP
CakePHP框架Session设置方法分析
2017/02/23 PHP
实例介绍PHP删除数组中的重复元素
2019/03/03 PHP
IE8 浏览器Cookie的处理
2009/01/31 Javascript
javascript + jquery实现定时修改文章标题
2014/03/19 Javascript
浅谈JavaScript中指针和地址
2015/07/26 Javascript
JS如何设置cookie有效期为当天24点并弹出欢迎登陆界面
2016/08/04 Javascript
EditPlus中的正则表达式 实战(2)
2016/12/15 Javascript
jQuery EasyUI Accordion可伸缩面板组件使用详解
2017/02/28 Javascript
关于jQuery EasyUI 中刷新Tab选项卡后一个页面变形的解决方法
2017/03/02 Javascript
JavaScript中undefined和null的区别
2017/05/03 Javascript
vue中如何动态绑定图片,vue中通过data返回图片路径的方法
2018/02/07 Javascript
深入解析vue 源码目录及构建过程分析
2019/04/24 Javascript
Vue+Element实现表格编辑、删除、以及新增行的最优方法
2019/05/28 Javascript
JavaScript实现拖拽功能
2020/02/11 Javascript
jQuery实现的解析本地 XML 文档操作示例
2020/04/30 jQuery
JavaScript 防盗链的原理以及破解方法
2020/12/29 Javascript
[46:43]DOTA2上海特级锦标赛D组小组赛#1 EG VS COL第三局
2016/02/28 DOTA
[01:28:44]DOTA2-DPC中国联赛定级赛 RNG vs iG BO3第一场 1月10日
2021/03/11 DOTA
Python中的字典遍历备忘
2015/01/17 Python
Python实现批量读取word中表格信息的方法
2015/07/30 Python
在cmd中运行.py文件: python的操作步骤
2018/05/12 Python
在Python中使用defaultdict初始化字典以及应用方法
2018/10/31 Python
Python如何对XML 解析
2020/06/28 Python
html5新增的定时器requestAnimationFrame实现进度条功能
2018/12/13 HTML / CSS
HTML5 通信API 跨域门槛将不再高、数据推送也不再是梦
2013/04/25 HTML / CSS
HTML5的hidden属性兼容老浏览器的方法
2014/04/23 HTML / CSS
戴尔加拿大官网:Dell加拿大
2016/09/17 全球购物
惠普香港官方商店:HP香港
2019/04/30 全球购物
音乐器材管理制度
2014/01/31 职场文书
个人简历自我评价
2014/02/02 职场文书
教师节横幅标语
2014/10/08 职场文书
工作批评与自我批评范文
2014/10/16 职场文书
教学督导岗位职责
2015/04/10 职场文书
对学校的意见和建议
2015/06/04 职场文书