我试图用javascript中的列加法来开发加法程序,例如: 53,22,我们从正确的3+2和5+2中添加数字,最终得到75,主要的问题是,我试图开发一个程序,它可以实现大numbers.so的加法,在添加大数时,我不会像1.26E+9那样胡言乱语。我试着通过定义下面的代码来完成它
function add(a,b)
{
return (Number(a) + Number(b)).toString();
}
console.log(add('58685486858601586', '8695758685'));我试图得到加法的数字,而不像5.8685496e+16那样胡言乱语。
发布于 2016-03-25 08:52:20
你可以把它们按数字加起来。
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>');
发布于 2016-03-25 04:26:54
在所有计算完成之前,我会把所有的值都保留为数字。准备好显示时,只需以任何您想要的方式格式化数字。例如,您可以使用toLocaleString。
发布于 2016-03-25 04:40:13
这个有几个库
一个好的经验法则是,在实际开始创建自己的库专有实现之前,确保您为库做了研究。找到了三个不同的库来解决您的问题
示例
这是如何使用所有三个库,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
58685495554360271https://stackoverflow.com/questions/36213774
复制相似问题