js 精確 加減乘除

/*函數

****js 精確加減乘除計算*****this

*@Func:用於js精確計算 js位數不精確後面會帶很長的小數 spa

 引用:  res = calc(3,'+',5)prototype

*@Author:wkjit

*@Date:2016-05-05 17:24:07io

*/ast



//加法函數function

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;

//給Number類型增長一個add方法,,使用時直接用 .add 便可完成計算。 

Number.prototype.add = function (arg) {

return accAdd(arg, this);

};


//減法函數

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(n);

}


//給Number類型增長一個sub方法,,使用時直接用 .sub 便可完成計算。 

Number.prototype.sub = function (arg) {

return Subtr(this, arg);

};


//乘法函數

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);

//給Number類型增長一個mul方法,使用時直接用 .mul 便可完成計算。 

Number.prototype.mul = function (arg) {

return accMul(arg, this);

}; 


//除法函數

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);

}

//給Number類型增長一個div方法,,使用時直接用 .div 便可完成計算。 

Number.prototype.div = function (arg) {

return accDiv(this, arg);

}; 


function calc(arg1,mark,arg2) {  

var num1 = arg1;  

var num2 = arg2; 

if(mark=="+"){

return num1.add(num2)

}else if(mark=='-'){

return num1.sub(num2)

}else if(mark=='*'){

return num1.mul(num2)

}else{

return num1.div(num2)

}

}

相關文章
相關標籤/搜索