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 相关文章推荐
javascript权威指南 学习笔记之变量作用域分享
Sep 28 Javascript
javascript之bind使用介绍
Oct 09 Javascript
Js 获取Gridview选中行的内容操作步骤
Feb 05 Javascript
JavaScript中的apply和call函数详解
Jul 20 Javascript
浅谈jquery事件处理
Apr 24 Javascript
Javascript刷新窗口方法小结
Oct 21 Javascript
jQuery图片左右滚动代码 有左右按钮实例
Jun 20 Javascript
Node学习记录之cluster模块
May 31 Javascript
vue2.0开发入门笔记之.vue文件的生成和使用
Sep 19 Javascript
利用three.js画一个3D立体的正方体示例代码
Nov 19 Javascript
深入浅析JS中的严格模式
Jun 04 Javascript
js技巧之十几行的代码实现vue.watch代码
Jun 09 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
使用PHPMyAdmin修复论坛数据库的图文方法
2012/01/09 PHP
PHP轻量级数据库操作类Medoo增加、删除、修改、查询例子
2014/07/04 PHP
ThinkPHP分组下自定义标签库实例
2014/11/01 PHP
PHP使用Pear发送邮件(Windows环境)
2016/01/05 PHP
PHP CURL与java http使用方法详解
2018/01/26 PHP
PHP 实现 JSON 数据的编码和解码操作详解
2020/04/22 PHP
工作需要写的一个js拖拽组件
2011/07/28 Javascript
javascript同页面多次调用弹出层具体实例代码
2013/08/16 Javascript
Js操作Select大全(取值、设置选中等等)
2013/10/29 Javascript
jQuery里filter()函数与find()函数用法分析
2015/06/24 Javascript
js实现瀑布流的三种方式比较
2020/06/28 Javascript
理解JavaScript事件对象
2016/01/25 Javascript
jQuery+ajax+asp.net获取Json值的方法
2016/06/08 Javascript
探究JavaScript中的五种事件处理程序方式
2016/12/07 Javascript
node.js 和HTML5开发本地桌面应用程序
2016/12/13 Javascript
基于JavaScript实现熔岩灯效果导航菜单
2017/01/04 Javascript
Vue.js之slot深度复制详解
2017/03/10 Javascript
EasyUI Datebox 日期验证之开始日期小于结束时间
2017/05/19 Javascript
vue使用中的内存泄漏【推荐】
2018/07/10 Javascript
Vue指令指令大全
2019/02/09 Javascript
vue基于v-charts封装双向条形图的实现代码
2019/12/09 Javascript
javascript中的with语句学习笔记及用法
2020/02/17 Javascript
vue 内联样式style中的background用法说明
2020/08/05 Javascript
Python实现将数据库一键导出为Excel表格的实例
2016/12/30 Python
Python中实现switch功能实例解析
2018/01/11 Python
python 实现UTC时间加减的方法
2018/12/31 Python
python实现Dijkstra静态寻路算法
2019/01/17 Python
python文件排序的方法总结
2020/09/13 Python
JD Sports法国:英国篮球和运动时尚的领导者
2017/09/28 全球购物
俄罗斯童装网上商店:BebaKids
2020/06/06 全球购物
管事部库房保管员岗位职责
2014/02/21 职场文书
大学生心理活动总结
2014/07/04 职场文书
小学生植树节活动总结
2014/07/04 职场文书
2014年大堂经理工作总结
2014/11/21 职场文书
浅谈克隆 JavaScript
2021/11/02 Javascript
Redis Lua脚本实现ip限流示例
2022/07/15 Redis