Calling web3.utils.BN.add gives error: Cannot create property 'negative' on number

Calling web3.utils.BN.add gives error: Cannot create property 'negative' on number

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

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

但它导致了这个错误:

Cannot create property 'negative' on number 2

版本:

Web3 使用的 BN 有一些未解决的问题 (ref)

建议的备选方案:

尝试使用另一个具有有效加法函数的 BigNumber 库 (like this)。

要使用库安装它:

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);

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

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

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

如果您要将 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'

如果您想将一个 BN 添加到另一个 BN, 使用 .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'