如何在Typescript中将BigNumber转换为普通数字

9
Guys,我正在从智能合约中获取数据,它返回了一个大数字,我想将其转换为普通数字,以便我可以用它来创建条形图。怎么做呢? enter image description here 这是我编写的代码片段,以便我可以将值存储在数组中:
//Creating candidatevoterarray for graph
    for (var i =0; i<= 4; i++){
        const temparray = this.candidatearray[i]
        const count = temparray.voteCount
        // this.candidatevotearray.push(count)
        console.log(count)
  }
3个回答

17
根据ethers文档,BigNumber中有一个名为.toNumber()的方法。

3
TypeScriptECMAScript中都没有所谓的“BigNumber”,也没有在Angular中出现。这意味着“BigNumber”必须是你自己编写的,或来自于你没有告诉我们的某个库。
如果它是你自己编写的,那么只有你知道如何将其转换为“number”或“bigint”。如果它来自于一个库,你就必须查阅该库的文档。
但请注意,编写和/或使用类似“BigNumber”这样的东西的主要原因是,它根本无法用“number”或“bigint”表示!因此,很可能你的“BigNumber”根本不能被转换(准确地)为“number”或“bigint”。
例如,我随机找到了一个库,它定义了一个名为BigNumber的类/构造函数,称为bignumber.js。它有一个BigNumber.prototype.toNumber方法,该方法将BigNumber的实例转换为ECMAScript原始的number。但是,当然,BigNumber的数量比number的数量无限多(更准确地说,有可数无穷多个BigNumber,但只有2的64次方个number),因此这种转换不可能精确。特别地,存在最小和最大的number,但不存在最小或最大的BigNumber,因此任何大于最大number或小于最小numberBigNumber都无法表示。

1
是的,在TypeScript或任何其他特定语言中,BigNumber实际上并不是直接可用的。 它是从Ethers.js派生的=> https://docs.ethers.io/v5/api/utils/bignumber/我已经成功使用then()方法“提取”了“number”值: let preCount = await instance.submissionsCount.call().then(v => { return v.toNumber() }); - 0xgio
@JÖrgWMittag,355k的声誉是巨大的,所以我们有点害怕透露bignumber.js(提供所谓的“BigNumber”)是我们中间非常受欢迎的库,我们(白痴)每天都使用它来赚取我们的生计 :) - Ramesh Pareek

1

我会像这样做:

    const getBalance = async () => {
        try {
            const balance = await token.balanceOf(address)
            console.log(Number(balance._hex))
            return balance;
        } catch (error) {
            console.log(error)
        }
    }

        useEffect(() => {
        getBalance().then((res) => setOwnerBalance(Number(res._hex)))    
    }, [data])  

    console.log(Number(balance._hex))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接