如何将ERC20合约返回的BigNumber转换为字符串或数字?
问题根源与解决方案
你的问题核心很明确——三个转换函数都缺少return语句。箭头函数如果用大括号{}包裹代码块,必须显式通过return返回结果,否则默认返回undefined。
修正后的转换函数
以下是修复后的完整代码:
- 基于
formatUnits的版本:
const toEther = (_n) => { return ethers.utils.formatUnits(_n, 'ether') }
- 基于
formatEther的版本:
const toTokens = (_n) => { return ethers.utils.formatEther(_n) }
- 转字符串后再格式化的版本:
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
相关产品推荐
相关产品推荐

