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

如何将ERC20合约返回的BigNumber转换为字符串或数字?

问题根源与解决方案

你的问题核心很明确——三个转换函数都缺少return语句。箭头函数如果用大括号{}包裹代码块,必须显式通过return返回结果,否则默认返回undefined。


修正后的转换函数

以下是修复后的完整代码:

  1. 基于formatUnits的版本:
const toEther = (_n) => {
    return ethers.utils.formatUnits(_n, 'ether')
}
  1. 基于formatEther的版本:
const toTokens = (_n) => {
    return ethers.utils.formatEther(_n)
}
  1. 转字符串后再格式化的版本:
const toEther = (_n) => {
    return ethers.utils.formatUnits(_n.toString(), 'ether')
}

更简洁的写法

可以省略大括号,箭头函数会自动返回表达式结果,代码更紧凑:

// 用formatUnits指定单位(支持任意小数位数的代币)
const toEther = (_n) => ethers.utils.formatUnits(_n, 'ether')

// 用formatEther(等价于formatUnits(_n, 18),适用于标准18位小数的ERC20)
const toTokens = (_n) => ethers.utils.formatEther(_n)

额外补充:直接转换为字符串/数字

  • 若要获取原始数值的字符串形式(不做单位转换):
const rawString = value.toString()
  • 若要转换为JS数字(注意:当数值超过Number.MAX_SAFE_INTEGER时会丢失精度,仅建议用于小额测试):
const numValue = value.toNumber()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 06:00:17