dnum
Version:
Small library for big decimal numbers.
56 lines (55 loc) • 3.29 kB
text/typescript
type Decimals = number;
type Dnum = readonly [value: Value, decimals: Decimals];
type Numberish = bigint | number | string | Dnum;
type Rounding = "ROUND_HALF" | "ROUND_UP" | "ROUND_DOWN";
type Value = bigint;
type AliasedOptions<
Options extends Record<string, unknown>,
AliasName extends keyof Options
> = Options | Options[AliasName];
declare function isDnum(value: unknown): value is Dnum;
declare function from(value: Numberish, decimals?: number | true): Dnum;
declare function setDecimals(value: Dnum, decimals: Decimals, options?: {
rounding?: Rounding;
}): Dnum;
declare function equalizeDecimals(nums: Dnum[], decimals?: number): Dnum[];
declare function toJSON([value, decimals]: Dnum): string;
declare function fromJSON(jsonValue: string): Dnum;
declare function toParts(dnum: Dnum, optionsOrDigits?: AliasedOptions<{
digits?: number;
trailingZeros?: boolean;
decimalsRounding?: Rounding;
}, "digits">): [whole: bigint, fraction: string | null];
declare function toNumber(value: Dnum, optionsOrDigits?: Parameters<typeof toParts>[1]): number;
declare function toString(value: Dnum, optionsOrDigits?: Parameters<typeof toParts>[1]): string;
type SignDisplay = "auto" | "always" | "exceptZero" | "negative" | "never";
declare function format(dnum: Dnum, optionsOrDigits?: Parameters<typeof toParts>[1] & {
compact?: boolean;
locale?: ConstructorParameters<typeof Intl.NumberFormat>[0];
signDisplay?: SignDisplay;
}): string;
declare function add(num1: Numberish, num2: Numberish, decimals?: Decimals): Dnum;
declare function subtract(num1: Numberish, num2: Numberish, decimals?: Decimals): Dnum;
declare function multiply(num1: Numberish, num2: Numberish, optionsOrDecimals?: AliasedOptions<{
decimals?: Decimals;
rounding?: Rounding;
}, "decimals">): Dnum;
declare function divide(num1: Numberish, num2: Numberish, optionsOrDecimals?: AliasedOptions<{
decimals?: Decimals;
rounding?: Rounding;
}, "decimals">): Dnum;
declare function remainder(num1: Numberish, num2: Numberish, decimals?: Decimals): Dnum;
declare function compare(num1: Numberish, num2: Numberish): 1 | -1 | 0;
declare function equal(num1: Numberish, num2: Numberish): boolean;
declare function greaterThan(num1: Numberish, num2: Numberish): boolean;
declare function greaterThanOrEqual(num1: Numberish, num2: Numberish): boolean;
declare function lessThan(num1: Numberish, num2: Numberish): boolean;
declare function lessThanOrEqual(num1: Numberish, num2: Numberish): boolean;
declare function abs(num: Numberish, decimals?: Decimals): Dnum;
declare function floor(num: Numberish, decimals?: Decimals): Dnum;
declare function ceil(num: Numberish, decimals?: Decimals): Dnum;
declare function round(num: Numberish, optionsOrDecimals?: AliasedOptions<{
decimals?: Decimals;
rounding?: Rounding;
}, "decimals">): Dnum;
export { toString, toParts, toNumber, toJSON, subtract, subtract as sub, setDecimals, round, remainder, remainder as rem, multiply, multiply as mul, lessThanOrEqual as lte, lessThan as lt, lessThanOrEqual, lessThan, isDnum, greaterThanOrEqual as gte, greaterThan as gt, greaterThanOrEqual, greaterThan, fromJSON, from, format, floor, equalizeDecimals, equal, equal as eq, divide, divide as div, compare, compare as cmp, ceil, add, abs, Value, Rounding, Numberish, Dnum, Decimals };