大数的javascript实现
复制代码代码如下所示:
VaR num1 = 3.125e7 VAR num2 = 31250000; / / / / 0 3e-17;
特殊大数的加减法可以用字符串+科学记数法进行,如:
复制代码代码如下所示:
/ /大整数这里只考虑的情况下,不考虑小数功能stradd(snum1,snum2){
一个数字/ *记录高的情况下。
无功snum1 = { 0,snum1 }。加入(),snum2 = { 0,snum2 }加入();
给出一串简短的数字 0。
snum1.length VaR len1 =,= snum2.length len2个,
zeroarr =功能(LEN){
var arr =新的数组(LEN),我= Len;
而(我){ ARR {我} = 0;}
报酬;
};
如果(len1 > len2个){
无功arrtemp = zeroarr(len1 - len2个);
ArrTemp.push(snum2),
snum2 = arrtemp.join(' ');
}
如果(len2个> len1){
无功arrtemp = zeroarr(len2个- len1);
ArrTemp.push(snum1),
snum1 = arrtemp.join(' ');
}
将被转换为字符串数组,并添加相应的数字。
VaR arr1 = snum1.split(''),arr2 = snum2.split('');
无功arraddres =新的数组(arr1。长度),我= arr1.length;
VaR和= 0, / /低和是否为cur1,研究,curadd;
当(i){
cur1 = + arr1 {我},{我} arr2研究= +;
curadd = cur1 +研究+一;
如果(10 > curadd)
我arraddres { } = curadd,
一个= 0;
其他的
我arraddres { } = + curadd.tostring()片(1,2),
一个= 1;
}
(如果!Andone){ / /最后一个,否则在0 arraddres.splice前拦截(0,1);
}
*前19位,如果有一个截取数组,用科学记数法来表达这个结果。
无功keeplen = 19; / / JS小数只有18位无功eafter = arraddres.length小数1; / / E倍数ebefore VaR背后,ebeforestr = ''; / / E在小数部分的前
如果(keeplen < arraddres。长度)
ebeforestr = { arraddres { 0 },arraddres.slice ',(1,keeplen)。加入()和()};
其他的
ebeforestr = { arraddres { 0 },arraddres.slice(1)。加入()和()};
ebefore = + ebeforestr;
返回{数(arraddres.join(')),ebefore,eafter };
}
StrAdd('1234567890 ','9876543210 '); / / -> { 11111111 00,1.1111111,9 }
代码和上面的一样,也很简单吗。