如何使用Polkadot JS API格式化余额?

问题描述

我希望获得使用底物链基本单位格式化的用户的余额。

当我使用toHuman()时,我得到一种自以为是的格式,其中包括这样的前缀:

let account = await api.query.system.account("EGVQCe73TpFyAZx5uKfE1222XfkT3BSKozjgcqzLBnc5eYo");
account.data.free.toHuman()

2.8320 kKSM

toNumber()返回的值根本不带任何单位:

account.data.free.toNumber()

2832057009447293

如何使用Polkadot JS API仅使用基本单位获得此值?

解决方法

您将需要在链中查询chainDecimals,这将告诉您应将小数位放在原始值中多少位:

api.registry.chainDecimals

12

您可以通过除以10 chainDecimals 直接解析数字,也可以使用Polkadot JS实用程序功能formatBalance来简化此格式:

formatBalance(
    accountData.data.free,{ withSi: false,forceUnit: '-' },chainDecimals
);

2,832.057

我最终做了这样的实用程序功能:

function toUnit(balance,decimals) {
    base = new BN(10).pow(new BN(decimals));
    dm = new BN(balance).divmod(base);
    return parseFloat(dm.div.toString() + "." + dm.mod.toString())
}

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...