您如何使用 Polkadot JS API 格式化余额?
How do you format balances with the Polkadot JS API?
我想获取使用 Substrate 链的基本单元格式化的用户余额。
当我使用 toHuman()
时,我得到了一种固执己见的格式,其中包含如下前缀:
let account = await api.query.system.account("EGVQCe73TpFyAZx5uKfE1222XfkT3BSKozjgcqzLBnc5eYo");
account.data.free.toHuman()
2.8320 kKSM
而 toNumber()
returns 没有任何单位的值:
account.data.free.toNumber()
2832057009447293
如何使用 Polkadot JS API 仅使用基本单位来获取此值?
您将需要查询 chainDecimals
的链,它会告诉您原始值中您应该放置小数点的多少位:
api.registry.chainDecimals
12
你可以直接通过除以 10chainDecimals 来解析数字,或者你可以使用 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())
}
我想获取使用 Substrate 链的基本单元格式化的用户余额。
当我使用 toHuman()
时,我得到了一种固执己见的格式,其中包含如下前缀:
let account = await api.query.system.account("EGVQCe73TpFyAZx5uKfE1222XfkT3BSKozjgcqzLBnc5eYo");
account.data.free.toHuman()
2.8320 kKSM
而 toNumber()
returns 没有任何单位的值:
account.data.free.toNumber()
2832057009447293
如何使用 Polkadot JS API 仅使用基本单位来获取此值?
您将需要查询 chainDecimals
的链,它会告诉您原始值中您应该放置小数点的多少位:
api.registry.chainDecimals
12
你可以直接通过除以 10chainDecimals 来解析数字,或者你可以使用 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())
}