js的' MAX_SAFE_INTEGER '是9007199254740991,而' MIN_SAFE_INTEGER '是-9007199254740991。那么如何实现一些特大数加法呢?今天就来讨论一下。
对于非常大或非常小的数字,浮点值可以用科学记数法来表示。使用科学记数法,您可以将一个数表示为一个数加上e/E,后跟10的倍数,例如:
复制代码如下:
var num1=3.125e7//31250000 var num 2=3e-17;//0.00000000000000003
极大数字的加法和减法可以通过使用字符串科学记数法来执行,例如:
复制代码如下:
//这里只考虑大整数的情况,不考虑十进制函数strAdd(sNum1,sNum2){)
/*加一位,记录最高位输入一位的情况*/
var sNum1=['0 ',sNum1]。join('),sNum2=['0 ',sNum2]。联接(“”);
/*向短数字字符串添加0 */
var len1=sNum1.length,len2=sNum2.length,
zeroArr=function(len){
var arr=新数组(len),i=len
while(I-){ arr[I]=0;}
返回arr
};
if(len1 len2){
var arrTemp=zero arr(len 1-len 2);
arrTemp.push(sNum2),
snu m2=arr temp . join(');
}
else if(len2 len1){
var arrTemp=zero arr(len 2-len 1);
arrTemp.push(sNum1),
snu m1=arr temp . join(');
}
/*将字符串转换为数组,并将其与相应的数字相加*/
var arr1=sNum1.split('),arr 2=snum 2 . split(');
var arrAddRes=新数组(arr1.length),I=arr 1 . length;
Var andone=0,//低阶和是否加到一个cur1,cur2,curAdd
while(i - ){
cur1=arr1[i],cur 2=arr 2[I];
curAdd=cur1 cur2 andone
if(10 curAdd)
arrAddRes[i]=curAdd,
andone=0;
其他
arrAddRes[i]=curAdd.toString()。切片(1,2),
andone=1;
}
如果(!and){//是否输入最后一个,否则截取前面的0 arrAddRes.splice(0,1);
}
/*数组截断的前19位(如果有)使用科学记数法来表示此结果*/
var keeplen=19//js的小数只保留小数点后18位var ea after=arraddres . length-1;//e下面的多部分变量eBefore,ebe forestr=“”;//e前面的小数部分
if(keeplen arrAddRes.length)
eBeforeStr=[arrAddRes[0],'.',arrAddRes.slice(1,keeplen)。join(')]。联接(“”);
其他
eBeforeStr=[arrAddRes[0],'.',arrAddRes.slice(1)。join(')]。联接(“”);
eBefore=eBeforeStr
return [Number(arrAddRes.join(')),eBefore,e after];
}
strAdd('1234567890 ',' 9876543210 ');//- [1111111100, 1.1111111, 9]
代码如上,是不是也很简单?
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。