You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Truffle测试中调用web3.utils.BN.add报错:Cannot create property 'negative' on number

解决Web3.js 1.0中BN大数相加的错误问题

这个报错的核心原因很明确:web3.utils.BN的add()方法只能接收BN类型的参数,不能直接传入普通数字。你直接传2进去,方法内部会尝试把这个数字当作BN对象来处理,自然就会抛出"Cannot create property 'negative' on number 2"的错误。

正确的做法是把要相加的数字也转换成BN对象,下面是两种可行的写法:

写法一:显式转换第二个数为BN

myBignumber = new web3.utils.BN(1);
const result = myBignumber.add(new web3.utils.BN(2)); // 结果是BN类型的3

写法二:简化的链式创建方式

const myBignumber = new web3.utils.BN(1);
const result = myBignumber.add(web3.utils.BN(2)); // web3.utils.BN可直接调用创建实例

另外要注意一个关键细节:BN的所有算术方法(比如add、sub、mul)都是返回一个新的BN实例,不会修改原来的对象。所以如果你想保存相加后的结果,一定要把返回值赋值给变量,比如上面代码里的result。

举个反例,下面的写法不会改变myBignumber的值:

myBignumber = new web3.utils.BN(1);
myBignumber.add(new web3.utils.BN(2));
console.log(myBignumber.toString()); // 输出还是1,不是3

内容的提问来源于stack exchange,提问作者Muhammad Altabba

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 09:21:58