调用web3.utils.BN.add会给出错误:无法在数字上创建属性“负”

时间:2019-02-09 09:16:58

标签: ethereum web3 truffle

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

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

但是它导致了这个错误:

  

无法在数字2上创建属性“负”

版本:

  • 松露5.0
  • Web3 1.0

3 个答案:

答案 0 :(得分:1)

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

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

通过这种方式,您不必安装另一个BigNumber库。

答案 1 :(得分:0)

Web3上使用的BN存在一些未解决的问题(ref

建议的替代方法:

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

要使用该库,请安装它:

npm install bignumber.js

现在进行松露测试:

var BigNumber = require("bignumber.js");

...

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

答案 2 :(得分:0)

如果您要向Number添加Java语言原生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'