调用 web3.utils.BN.add 会出现错误:无法在数字上创建属性'negative'



在松露测试中,我试图使用以下代码将两个大数字相加:

myBignumber = new web3.utils.BN(1);
myBignumber.add(2)

但它导致了这个错误:

无法在2号上创建属性"负数">

版本:

  • 松露5.0
  • Web3 1.0

或者,您也可以将数字2实例化为一个大数字来解决错误:

myBignumber = new web3.utils.BN(1);
myBignumber.add(new web3.utils.BN(2));

这样,您就不必安装另一个BigNumber库。

Web3中使用的BN存在一些未解决的问题(参考)

建议的替代方案:

请尝试使用另一个具有有效加法函数的BigNumber库(如下图所示)。

要使用库安装它:

npm install bignumber.js

现在进行松露测试:

var BigNumber = require("bignumber.js");
...
// Instead of the commented lines, use the next, uncommitted, ones:
// myBignumber = new web3.utils.BN(1);
// myBignumber.add(2)
myBignumber = new BigNumber(1); 
myBignumber.plus(2);

如果要将Javascript本机Number添加到BN,使用.addn():

const myBignumber = new web3.utils.BN(1);
myBignumber.addn(2);
// BN { negative: 0, words: [ 3 ], length: 1, red: null }
myBignumber.addn(2).toString();
// '3'

如果您希望将一个CCD_ 4添加到另一CCD_,使用.add():

const myBignumber = new web3.utils.BN(1);
myBignumber.add(new web3.utils.BN(2));
// BN { negative: 0, words: [ 3 ], length: 1, red: null }
myBignumber.add(new BN(2)).toString();
// '3'

相关内容

最新更新