如何使用列添加添加无限数字的数字?

时间:2016-03-25 03:58:05

标签: javascript

我正在尝试使用javascript中的列添加来开发添加程序,例如:53,22,我们从右边3 + 2和5 + 2添加数字最终结果为75,主要问题是大数字我我正在尝试开发一个可以实现大数字添加的程序。因此,当添加大数字时,我不会像1.26E + 9那样乱码。我尝试通过定义下面的代码

来做到这一点
function add(a,b)
{

    return (Number(a) + Number(b)).toString();
}
console.log(add('58685486858601586', '8695758685'));

我试图获得增加的数字,而不是像5.8685496e + 16那样的胡言乱语

3 个答案:

答案 0 :(得分:1)

我会将所有值保留为数字,直到完成所有计算。准备好显示时,只需按照您想要的任何方式格式化数字。例如,您可以使用toLocaleString

答案 1 :(得分:1)

有几个库

一个好的经验法则是确保在实际开始之前对图书馆进行研究,并创建自己的专有实现。找到了三个可以解决您问题的不同库

示例

这是如何使用所有三个库,BigNumber来自bignumber.js库,Decimal来自decimal.js,Big来自big.js

var bn1 = new BigNumber('58685486858601586');
var bn2 = new BigNumber('8695758685');
console.log(bn1.plus(bn2).toString());

bn1 = new Decimal('58685486858601586');
bn2 = new Decimal('8695758685');
console.log(bn1.plus(bn2).toString());


bn1 = new Big('58685486858601586');
bn2 = new Big('8695758685');
console.log(bn1.plus(bn2).toString());

控制台的输出是:

58685495554360271
58685495554360271
58685495554360271

答案 2 :(得分:1)

您可以逐位添加。

function sumStrings(a, b) {                                    // sum for any length
    function carry(value, index) {                             // cash & carry
        if (!value) {                                          // no value no fun
            return;                                            // leave shop
        }
        this[index] = (this[index] || 0) + value;              // add value
        if (this[index] > 9) {                                 // carry necessary?
            carry.bind(this)(this[index] / 10 | 0, index + 1); // better know this & go on
            this[index] %= 10;                                 // remind me later
        }
    }

    var array1 = a.split('').map(Number).reverse(),            // split stuff and reverse
        array2 = b.split('').map(Number).reverse();            // here as well

    array1.forEach(carry, array2);                             // loop baby, shop every item
    return array2.reverse().join('');                          // return right ordered sum
}

document.write(sumStrings('58685486858601586', '8695758685') + '<br>');
document.write(sumStrings('999', '9') + '<br>');
document.write(sumStrings('9', '999') + '<br>');
document.write(sumStrings('1', '9999999999999999999999999999999999999999999999999999') + '<br>');