您如何使用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

您可以通过除以10chainDecimals来直接解析数字,也可以使用PolkadotJS实用程序函数formatBalance来帮助您更容易地格式化它:

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

2832.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())
}

最新更新