做js经常要进行一些数学运算,里面的一些的函数能带来一些方便
1.加法:
function accAdd(arg1, arg2) {
var r1, r2, m;
try {
r1 = arg1.toString().split(".")[1].length;
}
catch (e) {
r1 = 0;
}
try {
r2 = arg2.toString().split(".")[1].length;
}
catch (e) {
r2 = 0;
}
m = Math.pow(10, Math.max(r1, r2));
return (arg1 * m + arg2 * m) / m;
}
2.减法:
function subtr(arg1,arg2){
var r1,r2,m,n;
try{r1=arg1.toString().split(".")[1].length}catch(e){r1=0}
try{r2=arg2.toString().split(".")[1].length}catch(e){r2=0}
m=Math.pow(10,Math.max(r1,r2));
//last modify by deeka
//动态控制精度长度
n=(r1>=r2)?r1:r2;
return ((arg1*m-arg2*m)/m).toFixed(2);
}
3.乘法
/**
** 乘法函数,用来得到精确的乘法结果
** 说明:javascript的乘法结果会有误差,在两个浮点数相乘的时候会比较明显。这个函数返回较为精确的乘法结果。
** 调用:accMul(arg1,arg2)
** 返回值:arg1乘以 arg2的精确结果
**/
function accMul(arg1, arg2) {
var m = 0, s1 = arg1.toString(), s2 = arg2.toString();
try {
m += s1.split(".")[1].length;
}
catch (e) {
}
try {
m += s2.split(".")[1].length;
}
catch (e) {
}
return Number(s1.replace(".", "")) * Number(s2.replace(".", "")) / Math.pow(10, m);
}
4.除法
/**
** 除法函数,用来得到精确的除法结果
** 说明:javascript的除法结果会有误差,在两个浮点数相除的时候会比较明显。这个函数返回较为精确的除法结果。
** 调用:accDiv(arg1,arg2)
** 返回值:arg1除以arg2的精确结果
**/
function accDiv(arg1, arg2) {
var t1 = 0, t2 = 0, r1, r2;
try {
t1 = arg1.toString().split(".")[1].length;
}
catch (e) {
}
try {
t2 = arg2.toString().split(".")[1].length;
}
catch (e) {
}
with (Math) {
r1 = Number(arg1.toString().replace(".", ""));
r2 = Number(arg2.toString().replace(".", ""));
return (r1 / r2) * pow(10, t2 - t1);
}
}
5.把数字转换为中文大写
function DX(n) {
if (!/^(0|[1-9]\d*)(\.\d+)?$/.test(n))
return "数据非法";
var unit = "千百拾亿千百拾万千百拾元角分", str = "";
n += "00";
var p = n.indexOf('.');
if (p >= 0)
n = n.substring(0, p) + n.substr(p+1, 2);
unit = unit.substr(unit.length - n.length);
for (var i=0; i < n.length; i++)
str += '零壹贰叁肆伍陆柒捌玖'.charAt(n.charAt(i)) + unit.charAt(i);
return str.replace(/零(千|百|拾|角)/g, "零").replace(/(零)+/g, "零").replace(/零(万|亿|元)/g, "$1").replace(/(亿)万|壹(拾)/g, "$1$2").replace(/^元零?|零分/g, "").replace(/元$/g, "元整");
}
6.格式化数字的小数点位数
function fnumber(s,fixed) {
if(s){
if(s==""){
return 0.00;
}
s = $.trim(s);
for(var i = 0; i < s.length; i++) {
s = s.replace(",", "");
if(s.indexOf(",") < 0) {
break;
}
}
if(fixed)
return parseFloat(s).toFixed(fixed);
else
return parseFloat(s);
}
}
//格式化数字为2位小数金额,逗号隔开
function fmoney(s) {
var str = parseFloat((s + "").replace(/[^\d\.-]/g, "")) + "";
var l = str.split(".")[0].split("").reverse();
var r = str.split(".")[1];
var r_num = 0;
var flag = false;
if(r != undefined && r.length >= 3 && parseFloat(r.charAt(2)) >= 5) {
flag = true;
}
if(r != undefined && r.length >= 3) {
r = r.substring(0,2);
}
if(flag) {
var temp = "0." + r;
temp = (parseFloat(temp) + 0.01) + "";
if(temp.length < 5){
r = temp.substring(2);
} else {
r = temp.substring(2,4);
}
}
if(r == undefined) {
r = "00";
}
if(r.length == 1) {
r = r + "0";
}
t = "";
for(i = 0; i < l.length; i ++ )
{
t += l[i] + ((i + 1) % 3 == 0 && (i + 1) != l.length ? "," : "");
}
var money = t.split("").reverse().join("") + "." + r;
if(money.charAt(0) == "-" && money.charAt(1) == ",") {
money = money.replace(",","");
}
return money=="0.00"?"0":money;
}