对于非常大或非常小的数,可以用科学记数法表示浮点值。采用科学记数法,可以把一个数表示为数字加e/E,后面加乘以10的倍数,如:
代码如下:
进行特别大的数的加减运算,可以使用字符串+科学记数法的方法来进行,如:
代码如下:
len2){
var arrTemp = zeroArr(len1 - len2);
arrTemp.push(sNum2),
sNum2 = arrTemp.join('');
}
else if(len2 > len1){
var arrTemp = zeroArr(len2 - len1);
arrTemp.push(sNum1),
sNum1 = arrTemp.join('');
}
/*将字符串转换为数组,以相应数位来相加*/
var arr1 = sNum1.split(''),arr2 = sNum2.split('');
var arrAddRes = new Array(arr1.length),i=arr1.length;
var andone = 0,// 低位相加是否进一 cur1,cur2,curAdd;
while(i--){
cur1 = +arr1[i],cur2 = +arr2[i];
curAdd = cur1+cur2+andone;
if(10 > curAdd)
arrAddRes[i] = curAdd,
andone = 0;
else
arrAddRes[i] = +curAdd.toString().slice(1,2),
andone = 1;
}
if(!andone){ // 最后是否进一,否则截取前面的0 arrAddRes.splice(0,1);
}
/*数组截取前19位如果有,用科学记数法来表示这个结果*/
var keeplen = 19; // js的小数只保留小数点后的18位 var eAfter = arrAddRes.length - 1; // e后面的倍数部分 var eBefore,eBeforeStr = ''; // e前面的小数部分
if(keeplen < arrAddRes.length)
eBeforeStr = [arrAddRes[0],'.',arrAddRes.slice(1,keeplen).join('')].join('');
else
eBeforeStr = [arrAddRes[0],arrAddRes.slice(1).join('')].join('');
eBefore = +eBeforeStr;
return [Number(arrAddRes.join('')),eBefore,eAfter];
}
strAdd('1234567890','9876543210'); // -> [1111111100,1.1111111,9]
代码如上了,是不是也很简单呢。
原文链接:https://www.f2er.com/js/57233.html