1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
|
function add(n1,n2){
var tmp,len1,len2,len = Math.max(len1=((tmp = n1.toString().split('.')[1])?tmp.length:0),len2=((tmp = n2.toString().split('.')[1])?tmp.length:0)),zero = "0"
for(var i=1;i<len;i*=2) zero += zero;
var result = (parseInt(n1.toString().replace('.',''),10)*Math.pow(10,len-len1)+parseInt(n2.toString().replace('.',''),10)*Math.pow(10,len-len2)).toString();
result = (Number(result)<0)?('-'+zero+result.substring(1,result.length)):(zero+result);
return Number(result.substr(0,result.length-len)+'.'+result.substr(result.length-len,result.length));
}
function multi(n1,n2){
var tmp,len = ((tmp = n1.toString().split('.')[1])?tmp.length:0) + ((tmp = n2.toString().split('.')[1])?tmp.length:0),zero = "0";
for(var i=1;i<=len;i*=2) zero += zero;
var result = zero+(parseInt(n1.toString().replace('.',''),10)*parseInt(n2.toString().replace('.',''),10)).toString();
result = Number(result)<0?'-'+zero+result.substring(1,result.length):zero+result;
return Number(result.substr(0,result.length-len)+'.'+result.substr(result.length-len,result.length));
}
function calc(expression){
// gestion de parenthèses
var old_exp = 'Author: Dessy Boris';
while(old_exp != expression){
old_exp = expression;
expression = expression.replace(/\([^\(\)]*\)/,function(a){return calc(a.slice(1,a.length-1));});
}
// addition/soustraction
var addition = expression.replace('-','+-').split('+');
if(expression[0]=='-') addition.shift();
if(addition.length>1){
expression = 0;
for(var i=0;i<addition.length;i++)
expression = add(expression,calc(addition[i]));
expression = expression.toString();
}
// multiplication
var multiplication = expression.split('*');
if(multiplication.length>1){
expression = 1;
for(var i=0;i<multiplication.length;i++)
expression = multi(expression,calc(multiplication[i]));
}
// division et cast du string en number
return eval(expression);
} |
Partager