Com*_*ide 4 javascript decimal cryptocurrency
众所周知,Javascript 在计算十进制数方面存在一些问题(或功能)。例如:
console.log(0.1 + 0.2) // 0.30000000000000004Run Code Online (Sandbox Code Playgroud)
我们知道我们可以使用不同的库来避免它(例如我使用bignumber.js),现在我们得到了预期的结果:
console.log(Number(new BigNumber(0.1).plus(0.2))); // 0.3Run Code Online (Sandbox Code Playgroud)
<script src="https://cdnjs.cloudflare.com/ajax/libs/bignumber.js/6.0.0/bignumber.min.js"></script>Run Code Online (Sandbox Code Playgroud)
但
Bignumber.js 有局限性:
它接受数字类型的值(最多仅 15 位有效数字)、字符串或 BigNumber 对象。
我们可以传递一个字符串(这是可能的),但这样我们可能会丢失末尾的一些数字:
console.log(Number(new BigNumber(0.1).plus("198.43092534959501"))); // 198.530925349595, not 198.53092534959501Run Code Online (Sandbox Code Playgroud)
<script src="https://cdnjs.cloudflare.com/ajax/libs/bignumber.js/6.0.0/bignumber.min.js"></script>Run Code Online (Sandbox Code Playgroud)
现在我使用加密货币,并且经常处理诸如 之类的数字198.43092534959501,在这种情况下我收到一个错误(如预期的那样):
console.log(Number(new BigNumber(0.1).plus(198.43092534959501))); // errorRun Code Online (Sandbox Code Playgroud)
<script src="https://cdnjs.cloudflare.com/ajax/libs/bignumber.js/6.0.0/bignumber.min.js"></script>Run Code Online (Sandbox Code Playgroud)
我知道有些人使用额外的乘数,但在上面提供的情况下它不起作用。如果您处理加密货币,您就会知道,我们实际上使用非相乘和相乘的值(例如489964999999000000和0.489964999999)。但我现在的目标是对不同货币的所有法定余额求和,但它们有不同的乘数,所以我不能只对未相乘的值求和,而且看起来我需要以某种方式对相乘的值求和。
这是一个很小的背景,但我的一般问题是:
如何求和/乘法/等等。超过 15 位的十进制数?
我已经在评论中回答了这个问题,但这里有一个演示。BigNumber 将接受字符串格式的数字作为输入。
console.log(new BigNumber(0.1).plus("198.43092534959501"));Run Code Online (Sandbox Code Playgroud)
<script src="https://cdnjs.cloudflare.com/ajax/libs/bignumber.js/6.0.0/bignumber.min.js"></script>Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4866 次 |
| 最近记录: |