如何解决如何使用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 举报,一经查实,本站将立刻删除。