1

Substrate チェーンのベースユニットを使用してフォーマットされたユーザーの残高を取得したいと考えています。

を使用するtoHuman()と、次のようなプレフィックスを含む独断的な書式設定が得られます。

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

2.8320kKSM

WhiletoNumber()は、単位をまったく含まない値を返します。

account.data.free.toNumber()

2832057009447293

Polkadot JS API を使用して基本単位だけでこの値を取得するにはどうすればよいですか?

4

1 に答える 1

5

のチェーンをクエリする必要がありますchainDecimals。これにより、生の値に小数点を何桁配置する必要があるかがわかります。

api.registry.chainDecimals

12

chainDecimalsを 10 で割って数値を直接解析するか、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())
}
于 2020-10-05T14:30:34.670 に答える