【问题标题】:What is the standard solution in JavaScript for handling big numbers (BigNum)?JavaScript 中处理大数(BigNum)的标准解决方案是什么?
【发布时间】:2010-06-18 18:47:20
【问题描述】:

JavaScript 或浏览器中是否内置了 bignum?

替代方法正在加载一个外部库,例如

<script type="text/javascript" src="the_bignum_library.js"></script>

但这似乎很慢,可能会触发安全警告。

我考虑过以http://github.com/silentmatt/javascript-bigintegerhttp://www.mainebrook.com/john/fun/euler.html 为基础。或者,是否有调用 Java bignum 库(如 apfloat)的解决方案?

【问题讨论】:

  • 我不太明白你的问题,你先要一个bignum库,然后你自己提供两个? :)
  • 当我说“精确有理算术”时,我的意思是“可以精确地表示像 1/7 这样的数字”。据我所知,我提到的两个库不能做到这一点——它们只能处理整数。
  • 有一个 BigRational.js 库用于精确的有理算术。
  • @PeterOlson:谢谢,那个项目(开始于 2013 年)看起来正是我在 2010 年所寻找的。也许我当时应该自己开始这样一个项目,而不是假设肯定有人else 已经开始这样的项目了吗?

标签: javascript floating-accuracy bignum


【解决方案1】:

更新(2019-08-19):BigInt 现在是 Firefox 和 Chrome 的一部分;您不再需要图书馆:

const bigInt1 = 1111111111111111111111111111111n;
const bigInt2 = BigInt("1111111111111111111111111111111")
console.log((bigInt1 + bigInt2)+"")

原答案:

如果您需要任意精度的十进制数,请使用Javascript-bignum,因为它既正确又快速。

【讨论】:

  • 不是一个有启发性的讨论。对这个问题给出一个对我来说似乎不合法的答案似乎是“非法的”,这让我感到非常沮丧。
  • 那么这是在所有 Firefox 版本上还是从特定版本开始?
【解决方案2】:

【讨论】:

  • 这对我的应用非常有用。 (虽然从技术上讲,这个库不能完全代表 1/7,但对于我的应用来说已经足够接近了)。
  • 这个库的内部表示是将数字存储为十进制字符串。对于较大的数字和操作,这非常慢。
  • Babiker,请原谅我拿走你的绿色“已回答”大勾号并把它交给 jnnnnn。 jnnnnn 的答案实际上确实代表了 1/7。
  • 严重存在错误。试试alert(new BigNumber(100).divide(1));
  • 不要粗鲁,但这个有问题的库会巧妙地伤害更多的人而不是帮助......
猜你喜欢
  • 2011-03-05
  • 1970-01-01
  • 2016-01-05
  • 2018-04-02
  • 2015-05-27
  • 1970-01-01
  • 2013-07-03
  • 2019-03-09
相关资源
最近更新 更多