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 相关文章推荐
getElementsByTagName vs selectNodes效率 及兼容的selectNodes实现
Feb 26 Javascript
jquery表格内容筛选实现思路及代码
Apr 16 Javascript
公共js在页面底部加载的注意事项介绍
Jul 18 Javascript
利用js实现在浏览器状态栏显示访问者在本页停留的时间
Dec 29 Javascript
Js实现网页键盘控制翻页的方法
Oct 30 Javascript
微信小程序后台解密用户数据实例详解
Jun 28 Javascript
jQuery实现checkbox即点即改批量删除及中间遇到的坑
Nov 11 jQuery
详解vue-admin和后端(flask)分离结合的例子
Feb 12 Javascript
在vue-cli搭建的项目中增加后台mock接口的方法
Apr 26 Javascript
javascript实现简单搜索功能
Mar 26 Javascript
使用JavaScript获取扫码枪扫描得到的条形码的思路代码详解
Jun 10 Javascript
Vue SPA 首屏优化方案
Feb 26 Vue.js
键盘上一张下一张兼容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
phpfans留言版用到的install.php
2007/01/04 PHP
PHP exif扩展方法开启详解
2014/07/28 PHP
Yii2创建多界面主题(Theme)的方法
2016/10/08 PHP
JAVASCRIPT对象及属性
2007/02/13 Javascript
Array栈方法和队列方法的特点说明
2014/01/24 Javascript
Node.js 去掉种子(torrent)文件里的邪恶信息
2015/03/27 Javascript
javascript控制台详解
2015/06/25 Javascript
完美解决node.js中使用https请求报CERT_UNTRUSTED的问题
2017/01/08 Javascript
jQuery手风琴的简单制作
2017/05/12 jQuery
详解angularJs中关于ng-class的三种使用方式说明
2017/06/02 Javascript
JavaScript实现一个空中避难的小游戏
2017/06/06 Javascript
微信小程序 蓝牙的实现实例代码
2017/06/27 Javascript
十大 Node.js 的 Web 框架(快速提升工作效率)
2017/06/30 Javascript
JavaScript实现瀑布流图片效果
2017/06/30 Javascript
使用JavaScript实现链表的数据结构的代码
2017/08/02 Javascript
基于nodejs res.end和res.send的区别
2018/05/14 NodeJs
vue3.0 CLI - 2.2 - 组件 home.vue 的初步改造
2018/09/14 Javascript
写一个Vue Popup组件
2019/02/25 Javascript
React优化子组件render的使用
2019/05/12 Javascript
Vue快速实现通用表单验证的示例代码
2020/01/09 Javascript
Django 浅谈根据配置生成SQL语句的问题
2018/05/29 Python
python脚本监控Tomcat服务器的方法
2018/07/06 Python
Python及Pycharm安装方法图文教程
2019/08/05 Python
Python 3.6 中使用pdfminer解析pdf文件的实现
2019/09/25 Python
使用Python进行中文繁简转换的实现代码
2019/10/18 Python
python操作链表的示例代码
2020/09/27 Python
查找适用于matplotlib的中文字体名称与实际文件名对应关系的方法
2021/01/05 Python
Linux不知道文件后缀名怎么判断文件类型
2014/08/21 面试题
艺术应用与设计个人的自我评价
2013/11/23 职场文书
优秀员工自荐书范文
2013/12/08 职场文书
单位办理社保介绍信
2014/01/10 职场文书
幼儿园保育员辞职信
2014/01/12 职场文书
2014新课程改革心得体会
2014/03/10 职场文书
微电影大赛策划方案
2014/06/05 职场文书
离职告别感言
2015/08/04 职场文书
中国梦宣传标语口号
2015/12/26 职场文书