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 相关文章推荐
一个可拖拽列宽表格实例演示
Nov 26 Javascript
js判断背景图片是否加载成功使用img的width实现
May 29 Javascript
document.addEventListener使用介绍
Mar 07 Javascript
jQuery事件绑定on()、bind()与delegate() 方法详解
Jun 03 Javascript
基于javascript html5实现多文件上传
Mar 03 Javascript
详解vue-validator(vue验证器)
Jan 16 Javascript
ReactNative短信验证码倒计时控件的实现代码
Jul 20 Javascript
原生js实现省市区三级联动代码分享
Feb 12 Javascript
详解React+Koa实现服务端渲染(SSR)
May 23 Javascript
微信小程序实现星级评分和展示
Jul 05 Javascript
详解javascript函数写法大全
Mar 25 Javascript
可拖拽组件slider.js使用方法详解
Dec 04 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中is_null,empty,isset,unset 的区别详细介绍
2013/04/28 PHP
实例介绍PHP的Reflection反射机制
2014/08/05 PHP
PHP实现多图上传(结合uploadify插件)思路分析
2016/11/30 PHP
让焦点自动跳转
2006/07/01 Javascript
jquery1.5.1中根据元素ID获取元素对象的代码
2011/04/02 Javascript
jQuery实现切换字体大小的方法
2015/03/10 Javascript
jquery模拟实现鼠标指针停止运动事件
2016/01/12 Javascript
轻松实现js弹框显示选项
2016/09/13 Javascript
ES6新特性八:async函数用法实例详解
2017/04/21 Javascript
基于Vue的文字跑马灯组件(npm 组件包)
2017/05/24 Javascript
前端axios下载excel文件(二进制)的处理方法
2018/07/31 Javascript
vue实现键盘输入支付密码功能
2018/08/18 Javascript
在vue项目中引入highcharts图表的方法
2019/01/21 Javascript
JQueryDOM之样式操作
2019/03/27 jQuery
Layui 带多选框表格监听事件以及按钮自动点击写法实例
2019/09/02 Javascript
微信小程序间使用navigator跳转传值问题实例分析
2020/03/27 Javascript
使用PYTHON接收多播数据的代码
2012/03/01 Python
深入浅析Python字符编码
2015/11/12 Python
pandas or sql计算前后两行数据间的增值方法
2018/04/20 Python
Python 实现引用其他.py文件中的类和类的方法
2018/04/29 Python
Python sorted函数详解(高级篇)
2018/09/18 Python
Python实现计算文件MD5和SHA1的方法示例
2019/06/11 Python
Python上下文管理器用法及实例解析
2019/11/11 Python
tornado+celery的简单使用详解
2019/12/21 Python
python GUI编程(Tkinter) 创建子窗口及在窗口上用图片绘图实例
2020/03/04 Python
详解用Python爬虫获取百度企业信用中企业基本信息
2020/07/02 Python
基于python获取本地时间并转换时间戳和日期格式
2020/10/27 Python
广告学专业推荐信范文
2013/11/23 职场文书
优秀求职信范文分享
2014/01/26 职场文书
小学美术教学反思
2014/02/01 职场文书
五四青年节优秀演讲稿范文
2014/05/28 职场文书
个性车贴标语
2014/06/24 职场文书
学生逃课检讨书1000字
2014/10/20 职场文书
公司会议开幕词
2015/01/29 职场文书
2016元旦晚会主持人开场白和结束语
2015/12/03 职场文书
关于拾金不昧的感谢信(五篇)
2019/10/18 职场文书