Commit 9e8e63b8 authored by Noah Zinsmeister's avatar Noah Zinsmeister

don't pad toSignificant with 0s...

parent 18817962
......@@ -52,25 +52,16 @@ export class Fraction {
public toSignificant(
significantDigits: number,
format: object = { groupSeparator: '' },
rounding: Rounding = Rounding.ROUND_HALF_UP,
maximumDecimalPlaces: number = Number.MAX_SAFE_INTEGER // should only be used to properly bound token amounts
rounding: Rounding = Rounding.ROUND_HALF_UP
): string {
invariant(Number.isInteger(significantDigits), `${significantDigits} is not a positive integer.`)
invariant(significantDigits > 0, `${significantDigits} is not positive.`)
invariant(Number.isInteger(maximumDecimalPlaces), `${maximumDecimalPlaces} is not an integer.`)
invariant(maximumDecimalPlaces >= 0, `maximumDecimalPlaces ${maximumDecimalPlaces} is negative.`)
Decimal.set({ precision: significantDigits + 1, rounding: toSignificantRounding[rounding] })
const quotient = new Decimal(this.numerator.toString())
.div(this.denominator.toString())
.toSignificantDigits(significantDigits)
const decimalPlaces =
quotient.decimalPlaces() === 0
? 0 // 0 decimal places for integer quotients
: quotient.precision(true) >= significantDigits
? quotient.decimalPlaces() // else, the default number of decimal plcaes if there's enough precision already
: significantDigits - (quotient.precision(true) - quotient.decimalPlaces()) // else, pad with 0s
return quotient.toFormat(Math.min(decimalPlaces, maximumDecimalPlaces), format) // while respecting max
return quotient.toFormat(quotient.decimalPlaces(), format)
}
public toFixed(
......
......@@ -42,7 +42,7 @@ export class TokenAmount extends Fraction {
}
public toSignificant(significantDigits: number, format?: object, rounding: Rounding = Rounding.ROUND_DOWN): string {
return super.toSignificant(significantDigits, format, rounding, this.token.decimals)
return super.toSignificant(significantDigits, format, rounding)
}
public toFixed(
......
......@@ -73,7 +73,7 @@ describe('entities', () => {
expect(route.midPrice.toSignificant(5, { groupSeparator: ',' })).toEqual('1,234')
expect(route.midPrice.invert().toSignificant(1)).toEqual('0.0008')
expect(route.midPrice.invert().toSignificant(2)).toEqual('0.00081')
expect(route.midPrice.invert().toSignificant(3)).toEqual('0.000810')
expect(route.midPrice.invert().toSignificant(3)).toEqual('0.00081')
expect(route.midPrice.invert().toSignificant(4)).toEqual('0.0008104')
expect(route.midPrice.invert().toSignificant(4, undefined, Rounding.ROUND_DOWN)).toEqual('0.0008103')
expect(route.midPrice.invert().toSignificant(5)).toEqual('0.00081037')
......@@ -120,7 +120,7 @@ describe('entities', () => {
expect(trade.executionPrice.invert().quote(expectedOutputAmount)).toEqual(inputAmount)
expect(trade.nextMidPrice.toSignificant(18)).toEqual('1.38958368072925352')
expect(trade.nextMidPrice.invert().toSignificant(18)).toEqual('0.719640000000000000')
expect(trade.nextMidPrice.invert().toSignificant(18)).toEqual('0.71964')
expect(trade.slippage.toSignificant(18)).toEqual('-16.8751042187760547')
......@@ -142,7 +142,7 @@ describe('entities', () => {
expect(trade.executionPrice.invert().quote(outputAmount)).toEqual(expectedInputAmount)
expect(trade.nextMidPrice.toSignificant(18)).toEqual('1.38958368072925352')
expect(trade.nextMidPrice.invert().toSignificant(18)).toEqual('0.719640000000000000')
expect(trade.nextMidPrice.invert().toSignificant(18)).toEqual('0.71964')
expect(trade.slippage.toSignificant(18)).toEqual('-16.8751042187760547')
......@@ -168,7 +168,7 @@ describe('entities', () => {
const trade = new Trade(route, outputAmount, TradeType.EXACT_INPUT)
expect(trade.slippage.toSignificant(18)).toEqual(
tokens[1].decimals === 9 ? '-0.300000099400899902' : '-0.300000000000000100'
tokens[1].decimals === 9 ? '-0.300000099400899902' : '-0.3000000000000001'
)
}
})
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment