,,JavaScript实现大数的运算

,,JavaScript实现大数的运算

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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: