JavaScript实现大数的运算
对于非常大或非常小的数,可以用科学记数法表示浮点值。采用科学记数法,可以把一个数表示为数字加e/E,后面加乘以10的倍数,如:
varnum1=3.125e7;//31250000varnum2=3e-17;//0.00000000000000003
进行特别大的数的加减运算,可以使用字符串+科学记数法的方法来进行,如:
//这里只考虑大整数的情况,不考虑小数functionstrAdd(sNum1,sNum2){
 /*增加一位数位以记录最高位进一的情况*/
 varsNum1=['0',sNum1].join(''),sNum2=['0',sNum2].join('');
  /*给短的数字字符串加补0*/
 varlen1=sNum1.length,len2=sNum2.length,
   zeroArr=function(len){
     vararr=newArray(len),i=len;
     while(i--){arr[i]=0;}
     returnarr;
   };
  if(len1>len2){
   vararrTemp=zeroArr(len1-len2);
   arrTemp.push(sNum2),
   sNum2=arrTemp.join('');
 }
 elseif(len2>len1){
   vararrTemp=zeroArr(len2-len1);
   arrTemp.push(sNum1),
   sNum1=arrTemp.join('');
 }
   /*将字符串转换为数组,以相应数位来相加*/
 vararr1=sNum1.split(''),arr2=sNum2.split('');
  vararrAddRes=newArray(arr1.length),i=arr1.length;
  varandone=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位如果有,用科学记数法来表示这个结果*/
 varkeeplen=19;//js的小数只保留小数点后的18位  vareAfter=arrAddRes.length-1;//e后面的倍数部分  vareBefore,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]
代码如上了,是不是也很简单呢。
