Round subscription price and payment amount
This commit is contained in:
parent
251dea508b
commit
b856f23eb1
3 changed files with 29 additions and 1 deletions
|
@ -4,6 +4,7 @@ import { DateTime } from "luxon"
|
|||
|
||||
import { BACKEND_URL } from "@/constants"
|
||||
import { ethereumAddressMatch, EthereumSignature } from "@/utils/ethereum"
|
||||
import { roundBigNumber } from "@/utils/numbers"
|
||||
import { http } from "./common"
|
||||
import { Contracts, getContract } from "./contracts"
|
||||
|
||||
|
@ -70,7 +71,7 @@ export class Subscription {
|
|||
}
|
||||
|
||||
get pricePerMonthInt(): BigNumber {
|
||||
return this.price.mul(SECONDS_IN_MONTH)
|
||||
return roundBigNumber(this.price.mul(SECONDS_IN_MONTH), 4)
|
||||
}
|
||||
|
||||
get pricePerMonth(): FixedNumber {
|
||||
|
|
13
src/utils/numbers.ts
Normal file
13
src/utils/numbers.ts
Normal file
|
@ -0,0 +1,13 @@
|
|||
import { BigNumber } from "@ethersproject/bignumber"
|
||||
|
||||
export function roundBigNumber(value: BigNumber, precision: number): BigNumber {
|
||||
const decimals = value.toString().length
|
||||
const divisor = BigNumber.from(10).pow(decimals - precision)
|
||||
const remainder = value.mod(divisor)
|
||||
const midpoint = BigNumber.from(10).pow(Math.max(decimals - precision - 1, 0)).mul(5)
|
||||
if (remainder.gte(midpoint)) {
|
||||
return value.div(divisor).add(1).mul(divisor)
|
||||
} else {
|
||||
return value.div(divisor).mul(divisor)
|
||||
}
|
||||
}
|
14
tests/unit/numbers.spec.ts
Normal file
14
tests/unit/numbers.spec.ts
Normal file
|
@ -0,0 +1,14 @@
|
|||
import { expect } from "chai"
|
||||
import { BigNumber } from "@ethersproject/bignumber"
|
||||
import { roundBigNumber } from "@/utils/numbers"
|
||||
|
||||
describe("Numbers utils", () => {
|
||||
it("Should round big number", () => {
|
||||
const value = BigNumber.from(534985)
|
||||
expect(roundBigNumber(value, 2).toNumber()).to.equal(530000)
|
||||
expect(roundBigNumber(value, 3).toNumber()).to.equal(535000)
|
||||
expect(roundBigNumber(value, 4).toNumber()).to.equal(535000)
|
||||
expect(roundBigNumber(value, 5).toNumber()).to.equal(534990)
|
||||
expect(roundBigNumber(value, 6).toNumber()).to.equal(534985)
|
||||
})
|
||||
})
|
Loading…
Reference in a new issue