计算 Javascript 中的大小数(超过 15 位)

Calculate large decimals (more than 15 digits) in Javascript

正如我们所知,Javascript 在计算小数方面存在一些问题(或特征)。例如:

console.log(0.1 + 0.2) // 0.30000000000000004

而且我们知道我们可以使用不同的库来避免它(例如我使用 bignumber.js),现在我们得到了预期的结果:

console.log(Number(new BigNumber(0.1).plus(0.2))); // 0.3
<script src="https://cdnjs.cloudflare.com/ajax/libs/bignumber.js/6.0.0/bignumber.min.js"></script>

但是

Bignumber.js 有限制:

It accepts a value of type number (up to 15 significant digits only), string or BigNumber object.

我们可以传递一个字符串(这是可能的),但是这样我们可以从最后丢失一些数字:

console.log(Number(new BigNumber(0.1).plus("198.43092534959501"))); // 198.530925349595, not 198.53092534959501
<script src="https://cdnjs.cloudflare.com/ajax/libs/bignumber.js/6.0.0/bignumber.min.js"></script>

现在我使用加密货币,我经常处理像 198.43092534959501 这样的数字,在这种情况下我得到一个错误(如预期的那样):

console.log(Number(new BigNumber(0.1).plus(198.43092534959501))); // error
<script src="https://cdnjs.cloudflare.com/ajax/libs/bignumber.js/6.0.0/bignumber.min.js"></script>

我知道有些人使用额外的乘法器,但它在上面提供的情况下不起作用。如果你处理加密货币,你知道,我们实际上使用非乘法和乘法值(如 4899649999990000000.489964999999)。但我现在的目标是对不同货币的所有法定余额求和,但它们有不同的乘数,所以我不能只对未乘积的值求和,看起来我需要以某种方式对乘积值求和。

这是一个小背景,但我的一般问题是:

如何sum/multiply/etc。 15位以上的十进制数?

我已经在评论中回答了这个问题,但这里有一个演示。 BigNumber 将接受字符串格式的数字作为输入。

console.log(new BigNumber(0.1).plus("198.43092534959501"));
<script src="https://cdnjs.cloudflare.com/ajax/libs/bignumber.js/6.0.0/bignumber.min.js"></script>