@hastom/fixed-point
Version:
Light lib for fixed point math made around native bigint
71 lines (70 loc) • 2.39 kB
TypeScript
export declare enum Rounding {
ROUND_UP = 0,
ROUND_DOWN = 1,
ROUND_CEIL = 2,
ROUND_FLOOR = 3,
ROUND_HALF_UP = 4,
ROUND_HALF_DOWN = 5,
ROUND_HALF_EVEN = 6,
ROUND_HALF_CEIL = 7,
ROUND_HALF_FLOOR = 8
}
export declare enum Decimals {
left = "left",
right = "right",
min = "min",
max = "max",
add = "add",
sub = "sub"
}
export type PrecisionResolution = Decimals | number | bigint;
export declare class FixedPoint {
static min(arg0: FixedPoint, ...args: FixedPoint[]): FixedPoint;
static max(arg0: FixedPoint, ...args: FixedPoint[]): FixedPoint;
base: bigint;
precision: bigint;
constructor(base: bigint, precision: bigint);
add(arg: FixedPoint, resultPrecision?: PrecisionResolution): FixedPoint;
sub(arg: FixedPoint, resultPrecision?: PrecisionResolution): FixedPoint;
mul(arg: FixedPoint, resultPrecision?: PrecisionResolution, rounding?: Rounding): FixedPoint;
private mulGeneral;
div(arg: FixedPoint, resultPrecision?: PrecisionResolution, rounding?: Rounding): FixedPoint;
private divGeneral;
cmp(arg: FixedPoint, comparator: (a: bigint, b: bigint) => boolean): boolean;
eq(arg: FixedPoint): boolean;
gt(arg: FixedPoint): boolean;
lt(arg: FixedPoint): boolean;
gte(arg: FixedPoint): boolean;
lte(arg: FixedPoint): boolean;
neg(): FixedPoint;
abs(): FixedPoint;
sqrt(): FixedPoint;
isZero(): boolean;
isPositive(): boolean;
isNegative(): boolean;
floor(): FixedPoint;
ceil(): FixedPoint;
round(mode?: Rounding): FixedPoint;
setPrecision(newPrecision: bigint, rounding?: Rounding): void;
toPrecision(resultPrecision: number | bigint, rounding?: Rounding): FixedPoint;
toString(): string;
toJSON(): string;
toDecimalString(trimTrailingZeros?: boolean): string;
toDecimal(): number;
valueOf(): number;
}
export interface FixedPoint {
plus: FixedPoint['add'];
minus: FixedPoint['sub'];
times: FixedPoint['mul'];
multipliedBy: FixedPoint['mul'];
dividedBy: FixedPoint['div'];
isEqualTo: FixedPoint['eq'];
isGreaterThan: FixedPoint['gt'];
isLessThan: FixedPoint['lt'];
isGreaterThanOrEqualTo: FixedPoint['gte'];
isLessThanOrEqualTo: FixedPoint['lte'];
negated: FixedPoint['neg'];
absoluteValue: FixedPoint['abs'];
squareRoot: FixedPoint['sqrt'];
}