如何在Truffle测试中使用Web3.js完成基础算术运算
问题根源
web3.utils.toWei() 在 Web3.js v1.x 版本中,入参为字符串时默认返回字符串类型的数值,直接使用 + 运算符会执行字符串拼接逻辑,而非算术加法。
调用 add/mul 等方法报错的原因是未先将待运算的数值转为BN(BigNumber)实例,只有BN实例挂载了这些算术运算方法。
正确实现方案
- 从web3工具库引入
toBN方法 - 所有参与运算的数值统一转为BN实例后再调用对应算术方法
- 运算完成后可按需转为字符串/常规数值使用
const { toBN, toWei } = web3.utils; // 转为wei单位后转成BN实例 const firstNumber = toBN(toWei('1', 'ether')); // 所有运算参数都要转为BN实例后再执行加法 const sum = firstNumber.add(toBN(100)); // 输出结果时调用toString()获取完整数值 console.log(sum.toString()); // 输出结果:1000000000000000100
运算注意事项
- 以太坊相关的大数值运算禁止直接使用JS原生算术运算符,数值超过2^53时会出现精度丢失,必须通过BN实例处理
- 算术方法的所有入参都必须为BN实例,否则会抛出调用错误
- 减法、乘法、除法可对应使用BN实例的
sub()、mul()、div()方法
内容的提问来源于stack exchange,提问作者Kevvv
相关产品推荐
相关产品推荐

