【问题标题】:Understanding the limitations of the bignumber.js library了解 bignumber.js 库的局限性
【发布时间】:2017-07-07 21:18:13
【问题描述】:

我最近发现了bignumber.js 库:

来源: https://github.com/MikeMcl/bignumber.js

我不确定的是数字运算的大小是否有限制?我一直在查看文档,试图在网上找到资源。但目前还没有。

【问题讨论】:

  • 为什么不在 repo 上询问呢?打开问题进行澄清或直接联系维护者的情况并不少见。也就是说,(实际上没有看)我猜它可能会将数字存储为字符串,从而为您提供一个大得离谱的最大值(对于给定的基数,b^maxint 我认为)。

标签: javascript bignum bignumber.js


【解决方案1】:

我没有与bignumber.js 合作过,但我稍微了解了一下 http://mikemcl.github.io/bignumber.js/#range 向我展示了它似乎是可配置的。

BigNumber.config({ RANGE: 500 })
BigNumber.config().RANGE     // [ -500, 500 ]
new BigNumber('9.999e499')   // '9.999e+499'
new BigNumber('1e500')       // 'Infinity'
new BigNumber('1e-499')      // '1e-499'
new BigNumber('1e-500')      // '0'

【讨论】:

    【解决方案2】:

    如果你运行这个:

    console.log(new BigNumber('123456789012345678901234567890').c);
    

    您可以看到数字存储为数组,最多 14 位

    因此,实际限制将是数组的最大长度乘以 14。这在很大程度上取决于您的机器,但假设您拥有有史以来最好的机器,ECMA-262 v6.0 表示the limit is for the length of an array is 2^32-1,即ToUint32 的大小,因此,理论上,您可以使用该库存储一个带有 14 * (2^32-1) 数字的数字,类似于:

    console.log(new BigNumber(2).pow(32).sub(1).mul(14).toString());
    

    60129542130 数字是什么

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-02-25
      • 2012-07-20
      • 2018-10-14
      • 1970-01-01
      • 2013-11-21
      • 1970-01-01
      • 2011-08-06
      • 2023-01-11
      相关资源
      最近更新 更多