首页 > 解决方案 > 是否有读取 ERC20 供应并输出不带小数的数字的功能?

问题描述

在我之前的帖子中,我发现了如何允许用户输入多个 ERC20 代币,并返回带有小数位数的值。

假设 ERC20 的小数位数为 4,用户输入 1.5,我们将使用 显示他们 1.5000 .toFixed(4)

现在我正在尝试相反的方法(代码后的更多信息)但是似乎没有任何功能,例如“fromFixed”。例如,我使用 web3js 读取了总供应量

checkBalance = async event => {
    try {
      const balance = await smartContract.methods.balanceOf(event).call();
      console.log(balance)
    } catch (err) {
      let error= 'Address Error';
      console.log(error)
    }
  };

假设您有 10k ERC20,上面的代码将显示在输出 100000000(即 10,000.0000)中。我想用一个点来显示结果,最后 4 位小数加上一个点,所以只有 10000.0000(10,000.0000)。

我试过了balance.toFixed(4)

但是输出更糟,因为我得到 1000000000000 (10,000,0000.0000)`

我尝试console.log(web3.fromWei(balanceOf, 'ether'));期望它将转换为以太坊的 18 位小数,输出将类似于 10 000.000000000000000000

这在“checkBalance”函数中永远不会起作用,因为它总是会捕获错误。

标签: javascriptdecimalsoliditysmartcontractsweb3js

解决方案


在我看来,这更多地与如何显示数字有关,而不是与一般的以太坊有关。在任何情况下,如果您想将 10000 显示为 10.000,那么使用四位小数,您可以执行x=10000/1000;console.log(x.toFixed(4)). 更一般地说,要n使用不同的小数位数显示数字,d您可以执行以下操作:x=n/(10^d);console.log(x.toFixed(d))


推荐阅读