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获取textarea中的光标位置
May 06 Javascript
使用ExtJS技术实现的拖动树结点
Aug 05 Javascript
jQuery.extend 函数详解
Feb 03 Javascript
jquery 如何动态添加、删除class样式方法介绍
Nov 07 Javascript
Javascript对象属性方法汇总
Nov 21 Javascript
jQuery中cookie插件用法实例分析
Dec 04 Javascript
jQuery ajax请求返回list数据动态生成input标签,并把list数据赋值到input标签
Mar 29 Javascript
AngularJS equal比较对象实例详解
Sep 14 Javascript
bootstrap中添加额外的图标实例代码
Feb 15 Javascript
node.js中axios使用心得总结
Nov 29 Javascript
如何将百度地图包装成Vue的组件的方法步骤
Feb 12 Javascript
手把手教你从零开始react+antd搭建项目
Jun 03 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模板解析类实例
2015/07/09 PHP
Yii框架连表查询操作示例
2019/09/06 PHP
基于PHP+Mysql简单实现了图书购物车系统的实例详解
2020/08/06 PHP
表单项的name命名为submit、reset引起的问题
2007/12/22 Javascript
javascript 简练的几个函数
2009/08/29 Javascript
小议Javascript中的this指针
2010/03/18 Javascript
javascript清空table表格的方法
2015/05/14 Javascript
简单谈谈node.js 版本控制 nvm和 n
2015/10/15 Javascript
在JavaScript中对HTML进行反转义详解
2016/05/18 Javascript
JS实现输入框提示文字点击时消失效果
2016/07/19 Javascript
微信小程序 location API实例详解
2016/10/02 Javascript
BootstrapValidator超详细教程(推荐)
2016/12/07 Javascript
AngularJS实现根据不同条件显示不同控件
2017/04/20 Javascript
微信小程序中做用户登录与登录态维护的实现详解
2017/05/17 Javascript
ajax请求data遇到的问题分析
2018/01/18 Javascript
JS简单实现查看文档创建日期、修改日期和文档大小的方法示例
2018/04/08 Javascript
Bootstrap table中toolbar新增条件查询及refresh参数使用方法
2018/05/18 Javascript
微信小程序scroll-view实现字幕滚动
2018/07/14 Javascript
jQuery 点击获取验证码按钮及倒计时功能
2018/09/20 jQuery
JS跨域请求的问题解析
2018/12/03 Javascript
Vue将页面导出为图片或者PDF
2020/08/17 Javascript
vue打包静态资源后显示空白及static文件路径报错的解决
2020/09/02 Javascript
浅谈Ant Design Pro 菜单自定义 icon
2020/11/17 Javascript
Python进阶之尾递归的用法实例
2018/01/31 Python
pandas 将索引值相加的方法
2018/11/15 Python
Python获取、格式化当前时间日期的方法
2020/02/10 Python
python 画图 图例自由定义方式
2020/04/17 Python
Django中和时区相关的安全问题详解
2020/10/12 Python
CSS3 边框效果
2019/11/04 HTML / CSS
canvas画布实现手写签名效果的示例代码
2019/04/23 HTML / CSS
澳大利亚工具仓库:Tools Warehouse
2018/10/15 全球购物
屈臣氏越南官网:Watsons越南
2021/01/14 全球购物
机电一体化求职信
2014/03/10 职场文书
2015年数学教研工作总结
2015/07/22 职场文书
四年级作文之植物
2019/09/20 职场文书
详解Python flask的前后端交互
2022/03/31 Python