微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决如何使用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())
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。