From 8fbb7d4bccdc104e55d1c29293dc08ef4146ef01 Mon Sep 17 00:00:00 2001 From: willclarktech Date: Wed, 10 Jun 2020 13:40:42 +0100 Subject: [PATCH] Add comparison methods to Decimal --- packages/math/src/decimal.ts | 25 +++++++++++++++++++++++++ packages/math/types/decimal.d.ts | 6 ++++++ 2 files changed, 31 insertions(+) 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; }