quasvel
Version:
Access and interact with Aragon Organizations and their apps.
39 lines (28 loc) • 1.19 kB
text/typescript
import { BigNumber, utils } from 'ethers'
export const PCT_DECIMALS = 16 // 100% = 10^18
export const PCT_BASE = BigNumber.from(`100${'0'.repeat(PCT_DECIMALS)}`)
export const bn = (x: string | number): BigNumber => BigNumber.from(x.toString())
export const formatBn = (
number: string | BigNumber,
numberDecimals: string | number,
formattedDecimals = 2
): string => {
const formattedNumber = utils.formatUnits(number, numberDecimals)
const decimalPosition = formattedNumber.indexOf('.')
if (decimalPosition === -1) {
return `${formattedNumber}.${'0'.repeat(formattedDecimals)}`
}
const decimals = formattedNumber.substring(decimalPosition + 1)
const decimalsLength = decimals.length
if (decimalsLength <= formattedDecimals) {
return `${formattedNumber}${'0'.repeat(formattedDecimals - decimalsLength)}`
}
const integer = formattedNumber.substring(0, decimalPosition)
const roundedDecimals = Math.round(
parseInt(decimals) / 10 ** (decimalsLength - formattedDecimals)
)
const parsedRoundedDecimals = (roundedDecimals === 0)
? '0'.repeat(formattedDecimals)
: roundedDecimals.toString()
return `${integer}.${parsedRoundedDecimals}`
}