diff --git a/packages/util/src/format/formatBalance.spec.ts b/packages/util/src/format/formatBalance.spec.ts index eb6b9eb3b..a8e02be9d 100644 --- a/packages/util/src/format/formatBalance.spec.ts +++ b/packages/util/src/format/formatBalance.spec.ts @@ -20,6 +20,12 @@ describe('formatBalance', (): void => { ).toEqual('123.456ยต Unit'); }); + it('formats 123,456,789,000 (decimals=36)', (): void => { + expect( + formatBalance(TESTVAL, true, 36) + ).toEqual('0.123y Unit'); + }); + it('formats 123,456,789,000 (decimals=15, Compact)', (): void => { const compact = { toBn: (): BN => TESTVAL, diff --git a/packages/util/src/format/formatBalance.ts b/packages/util/src/format/formatBalance.ts index b6d77ec2e..5d9e69ef4 100644 --- a/packages/util/src/format/formatBalance.ts +++ b/packages/util/src/format/formatBalance.ts @@ -53,7 +53,8 @@ function _formatBalance (input?: number | string | BN | E const si = calcSi(text, decimals); const mid = text.length - (decimals + si.power); const prefix = text.substr(0, mid); - const postfix = `${text.substr(mid)}000`.substr(0, 3); + const padding = mid < 0 ? 0 - mid : 0; + const postfix = `${`${new Array(padding + 1).join('0')}${text}`.substr(mid < 0 ? 0 : mid)}000`.substr(0, 3); const units = withSi ? ( si.value === '-' diff --git a/packages/util/src/format/si.ts b/packages/util/src/format/si.ts index 29c091fa5..5cabf36d3 100644 --- a/packages/util/src/format/si.ts +++ b/packages/util/src/format/si.ts @@ -31,7 +31,8 @@ export const SI: SiDef[] = [ ]; export function calcSi (text: string, decimals: number): SiDef { - return SI[(SI_MID - 1) + Math.ceil((text.length - decimals) / 3)] || SI[SI.length - 1]; + const siDefIndex = (SI_MID - 1) + Math.ceil((text.length - decimals) / 3); + return SI[siDefIndex] || SI[siDefIndex < 0 ? 0 : SI.length - 1]; } // Given a SI type (e.g. k, m, Y) find the SI definition