欢迎来到QQ技术交流群:126095418
之前曾写过一篇关于javascript精度计算的文章,文章中还贴了相关代码,但是后来经过多种情况的测试,整体下来,还是会有一些问题,所以今天特地补充一篇更加完善的JS精度计算的函数文章,话不多说,直接上代码
function DecimalCompute (num1, num2, op) {
//如果没传参的处理
if(!arguments.length){
return;
}
//如果传参不合规的处理
if(num1 === undefined){
num1 = 0;
}
if(num2 === undefined){
num2 = 0;
}
num1 = num1.toString();
num2 = num2.toString();
//如果传参为负数的处理
if(~num1.indexOf('-')){
if(num1.substr(1) > 0){
num1 = Number(num1);
}else{
num1 = Number(num1);
}
}
if(~num2.indexOf('-')){
if(num2.substr(1) > 0){
num2 = Number(num2);
}else{
num2 = Number(num2);
}
}
var ext1Len = num1.toString().split('.')[1] ? num1.toString().split('.')[1].length : 0;
var ext2Len = num2.toString().split('.')[1] ? num2.toString().split('.')[1].length : 0;
var m = Math.pow(10, Math.max(ext1Len, ext2Len));
var result = '';
switch (op) {
case '+' :
result = (num1 * m + num2 * m) / m;
break;
case '-' :
result = (num1 * m - num2 * m) / m;
break;
case '*' :
result = ((num1 * m) * (num2 * m)) / m;
break;
case '/' :
result = ((num1 * m) - (num2 * m)) / m;
break;
default :
result = (num1 * m + num2 * m) / m;
}
if(!result){
result = 0;
}
return result;
}
这段代码分别对传值和返回值都进行了处理,并且加入了加减乘除的四种方式,可以通过第三个参数很方便的控制