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 相关文章推荐
判断iframe是否加载完成的完美方法
Jan 07 Javascript
jQuery之end()和pushStack()使用介绍
Feb 07 Javascript
Javascript学习笔记之函数篇(四):arguments 对象
Nov 23 Javascript
原生js和jQuery实现淡入淡出轮播效果
Dec 25 Javascript
jQuery弹层插件jquery.fancybox.js用法实例
Jan 22 Javascript
js 轮播效果实例分享
Dec 28 Javascript
jQuery实现的分页功能示例
Jan 22 Javascript
Angular2使用jQuery的方法教程
May 28 jQuery
五步轻松实现zTree的使用
Nov 01 Javascript
vue全局组件与局部组件使用方法详解
Mar 29 Javascript
Vuepress 搭建带评论功能的静态博客的实现
Feb 17 Javascript
原生js实现each方法实例代码详解
May 27 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
我的论坛源代码(九)
2006/10/09 PHP
PHP生成唯一的促销/优惠/折扣码(附源码)
2012/12/28 PHP
PHP中foreach()用法汇总
2015/07/02 PHP
TP5框架请求响应参数实例分析
2019/10/17 PHP
JavaScript 组件之旅(四):测试 JavaScript 组件
2009/10/28 Javascript
判断javascript的数据类型(示例代码)
2013/12/11 Javascript
JavaScript的内存释放问题详解
2015/01/21 Javascript
如何使用HTML5地理位置定位功能
2015/04/27 Javascript
非常实用的12个jquery代码片段
2015/11/02 Javascript
原生JavaScript实现动态省市县三级联动下拉框菜单实例代码
2016/02/03 Javascript
JavaScript中 ES6 generator数据类型详解
2016/08/11 Javascript
详解微信小程序开发之城市选择器 城市切换
2017/01/17 Javascript
简单易懂的天气插件(代码分享)
2017/02/04 Javascript
javascript作用域链与执行环境详解
2017/03/25 Javascript
Easyui ueditor 整合解决不能编辑的问题(推荐)
2017/06/25 Javascript
jQuery 实现倒计时天,时,分,秒功能
2018/07/31 jQuery
vue实现商品加减计算总价的实例代码
2018/08/12 Javascript
Python中模拟enum枚举类型的5种方法分享
2014/11/22 Python
在Python中进行自动化单元测试的教程
2015/04/15 Python
Python统计纯文本文件中英文单词出现个数的方法总结【测试可用】
2018/07/25 Python
Python实现购物评论文本情感分析操作【基于中文文本挖掘库snownlp】
2018/08/07 Python
Python + selenium + requests实现12306全自动抢票及验证码破解加自动点击功能
2018/11/23 Python
python web框架 django wsgi原理解析
2019/08/20 Python
详解Python并发编程之从性能角度来初探并发编程
2019/08/23 Python
Pycharm 字体大小调整设置的方法实现
2019/09/27 Python
详解Python中的分支和循环结构
2020/02/11 Python
Windows下Pycharm远程连接虚拟机中Centos下的Python环境(图文教程详解)
2020/03/19 Python
CSS3 简写animation
2012/05/10 HTML / CSS
canvas学习总结三之绘制路径-线段
2019/01/31 HTML / CSS
如何提高MySql的安全性
2014/06/19 面试题
入学生会自荐书范文
2014/02/05 职场文书
《鞋匠的儿子》教学反思
2014/03/02 职场文书
试用期自我鉴定范文
2014/03/20 职场文书
南京青奥会口号
2014/06/12 职场文书
医学专业大学生职业生涯规划书
2014/10/25 职场文书
中国古代史学名著《战国策》概述
2019/08/09 职场文书