众所周知,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>
&#13;
BUT
Bignumber.js有局限性:
它接受类型编号的值(最多15位有效数字), string或BigNumber对象。
我们可以传递一个字符串(它可能),但这样我们可以从最后丢失一些数字:
console.log(Number(new BigNumber(0.1).plus("198.43092534959501"))); // 198.530925349595, not 198.53092534959501
&#13;
<script src="https://cdnjs.cloudflare.com/ajax/libs/bignumber.js/6.0.0/bignumber.min.js"></script>
&#13;
现在我使用加密货币,我经常处理像198.43092534959501
这样的数字,在这种情况下我得到一个错误(如预期的那样):
console.log(Number(new BigNumber(0.1).plus(198.43092534959501))); // error
&#13;
<script src="https://cdnjs.cloudflare.com/ajax/libs/bignumber.js/6.0.0/bignumber.min.js"></script>
&#13;
我知道有些人使用额外的乘数,但在上面提供的情况下它不起作用。如果你处理加密货币,你知道,我们实际上使用非乘法和乘法值(如489964999999000000
和0.489964999999
)。但我现在的目标是将不同货币的所有法定余额相加,但它们有不同的乘数,所以我不能只计算非乘法值,看起来我需要以某种方式对乘法值求和。
这是一个小背景,但我的一般问题是:
如何加/加/等。十进制数,超过15位?
答案 0 :(得分:3)
我已经在评论中回答了这个问题,但这是一个示范。 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>