Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/404.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何使用列加法添加具有无限位数的数字?_Javascript - Fatal编程技术网

Javascript 如何使用列加法添加具有无限位数的数字?

Javascript 如何使用列加法添加具有无限位数的数字?,javascript,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', '86957586

我试图在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这样的胡言乱语。在完成所有计算之前,我会将所有值作为数字保留。当准备好显示时,只需按照您想要的方式格式化数字。例如,您可以使用
toLocaleString

有几个库可供使用

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

示例

这是如何使用所有三个库,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

你可以一个数字一个数字地添加它们

函数sumStrings(a,b){//任意长度的和
函数进位(值、指数){//现金和进位
如果(!value){//no value no fun
return;//离开商店
}
此[索引]=(此[索引]| | 0)+值;//添加值
如果(这个[索引]>9){//,有必要吗?
carry.bind(this)(this[index]/10 | 0,index+1);//最好了解这一点并继续
此[索引]]=10;//稍后提醒我
}
}
var array1=a.split(“”).map(Number).reverse(),//拆分内容并反转
array2=b.split(“”).map(Number).reverse();//这里也是
一排一排地走;一圈一圈地走,买每一件东西
return array2.reverse().join(“”);//返回右序和
}
编写(sumStrings('58685486858601586','8695758685')+'
); 编写(sumStrings('999','9')+'
'); 编写(sumStrings('9','999')+'
');
document.write(sumStrings('1','99999999999999999999999999999999999999')+'
您已经在问题中解释了如何执行此操作。现在您只需要实现它。有什么问题吗?你不知道如何对字符串的字符进行迭代吗?我正在尝试,但我希望获得有效的实现技巧,我现在不担心效率。先建立正确的东西。5.8685496e+16不是胡言乱语。这是一种科学符号——大多数人更喜欢这种符号,因为它可以阻止显示占用大量空间的很长的数字,并且通常无法阅读。是的,在这一点上,我称之为胡言乱语,因为对于一个没有科学知识的外行用户来说,他们会觉得这是他们不知道的东西。gabesoft,你的回答给我省了一个SLOC,但我正试图在没有逗号的情况下得到它。在这里查看我的工作,您可以使用
tolocalString()删除逗号。在您发布的JSFIDLE上替换(/,/g',)
@Sam,将
tolocalString
更改为
toString
也同样有效,并且输出时不带逗号,至少在chrome中是这样。如果你不想在计算中失去精度,你应该使用一个大的数字库,比如@konkked@Zequ那是因为他的人数太少了。Try.toString on this number
1760939909544640000000
除了引用这些库之外@konkked还有什么其他使用这些库的方法???@Sam包括了如何使用这些库来完成您试图做的事情的示例。我正在尝试用javascript提供的方法构建一个简单的add函数,而不包括任何额外的库(如果我想使用应该通过api调用而不是通过th生成的附加库)@gabesoft,Zequ,konkked上述代码编译时不会丧失洞察力,也不会使用库。