diff --git a/packages/math/src/decimal.ts b/packages/math/src/decimal.ts index e126e4ed..869401fb 100644 --- a/packages/math/src/decimal.ts +++ b/packages/math/src/decimal.ts @@ -118,4 +118,29 @@ export class Decimal { const sum = this.data.atomics.add(new BN(b.atomics)); return new Decimal(sum.toString(), this.fractionalDigits); } + + public compare(b: Decimal): number { + if (this.fractionalDigits !== b.fractionalDigits) throw new Error("Fractional digits do not match"); + return this.data.atomics.cmp(new BN(b.atomics)); + } + + public equals(b: Decimal): boolean { + return this.compare(b) === 0; + } + + public isLessThan(b: Decimal): boolean { + return this.compare(b) < 0; + } + + public isLessThanOrEqual(b: Decimal): boolean { + return this.compare(b) <= 0; + } + + public isGreaterThan(b: Decimal): boolean { + return this.compare(b) > 0; + } + + public isGreaterThanOrEqual(b: Decimal): boolean { + return this.compare(b) >= 0; + } } diff --git a/packages/math/types/decimal.d.ts b/packages/math/types/decimal.d.ts index 9d65be9d..cae891b1 100644 --- a/packages/math/types/decimal.d.ts +++ b/packages/math/types/decimal.d.ts @@ -23,4 +23,10 @@ export declare class Decimal { * Both values need to have the same fractional digits. */ plus(b: Decimal): Decimal; + compare(b: Decimal): number; + equals(b: Decimal): boolean; + isLessThan(b: Decimal): boolean; + isLessThanOrEqual(b: Decimal): boolean; + isGreaterThan(b: Decimal): boolean; + isGreaterThanOrEqual(b: Decimal): boolean; }