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

如何比较两个wei值?解决ethers.js中balance.lt报错问题

问题

使用ethers.js v6编写NFT余额校验代码时,调用balance.lt(priceInWei)报错TypeError: balance.lt is not a function,直接用<运算符比较也无法得到正确结果。

代码片段

provider = new ethers.BrowserProvider(window.ethereum);
signer = await provider.getSigner();
let contract = new ethers.Contract(NFTMarketplaceAddress, Marketplace.abi, signer);
const address = await signer.getAddress();
const balance = await provider.getBalance(address);
const priceInWei = ethers.parseEther(NFTData.price.toString());
  
console.log(balance.lt(priceInWei))

报错信息

TypeError: balance.lt is not a function

解决方案

问题根源是混淆了ethers.js v6中BigNumber与FixedNumber的API,且JavaScript原生运算符无法正确处理超大数值:

  1. provider.getBalance()和ethers.parseEther()返回的都是BigNumber类型,你参考的lt()是FixedNumber专属方法,因此调用报错。
  2. 直接用<比较BigNumber会触发JavaScript的类型转换,当数值超过安全整数范围时,精度丢失导致结果错误。

正确写法

ethers.js v6对BigNumber的比较方法做了语义化命名调整,使用以下方法即可正确校验:

// 检查余额是否小于目标价格
console.log(balance.isLessThan(priceInWei));

其他可用的BigNumber比较方法

  • 大于:balance.isGreaterThan(priceInWei)
  • 等于:balance.isEqual(priceInWei)
  • 小于等于:balance.isLessThanOrEqual(priceInWei)
  • 大于等于:balance.isGreaterThanOrEqual(priceInWei)

内容的提问来源于stack exchange,提问作者S N Sakib

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 11:37:24