diff --git a/decimal.d.mts b/decimal.d.mts new file mode 100644 index 0000000..bd7bfb1 --- /dev/null +++ b/decimal.d.mts @@ -0,0 +1,570 @@ +export default Decimal; + +export declare class Decimal { + /** + * The Decimal constructor and exported function. + * Return a new Decimal instance. + * + * @param value {number|string|Decimal} A numeric value. + * + */ + constructor(value: Numeric) + + /** + * Return a new Decimal whose value is the absolute value of this Decimal. + */ + absoluteValue(): Decimal; + + /** + * Return a new Decimal whose value is the absolute value of this Decimal. + */ + abs(): Decimal; + + /** + * Return + * 1 if the value of this Decimal is greater than the value of `y`, + * -1 if the value of this Decimal is less than the value of `y`, + * 0 if they have the same value + */ + comparedTo(y: Numeric): 1|0|-1; + + /** + * Return + * 1 if the value of this Decimal is greater than the value of `y`, + * -1 if the value of this Decimal is less than the value of `y`, + * 0 if they have the same value + */ + cmp(y: Numeric): 1|0|-1; + + /** + * Return the number of decimal places of the value of this Decimal. + */ + decimalPlaces(): number; + + /** + * Return the number of decimal places of the value of this Decimal. + */ + dp(): number; + + /** + * Return a new Decimal whose value is the value of this Decimal divided by `y`, truncated to + * `precision` significant digits. + * + */ + dividedBy(y: Numeric): Decimal; + + /** + * Return a new Decimal whose value is the value of this Decimal divided by `y`, truncated to + * `precision` significant digits. + * + */ + div(y: Numeric): Decimal; + + /** + * Return a new Decimal whose value is the integer part of dividing the value of this Decimal + * by the value of `y`, truncated to `precision` significant digits. + * + */ + dividedToIntegerBy(y: Numeric): Decimal; + + /** + * Return a new Decimal whose value is the integer part of dividing the value of this Decimal + * by the value of `y`, truncated to `precision` significant digits. + * + */ + idiv(y: Numeric): Decimal; + + /** + * Return true if the value of this Decimal is equal to the value of `y`, otherwise return false. + */ + equals(y: Numeric): boolean; + + /** + * Return true if the value of this Decimal is equal to the value of `y`, otherwise return false. + */ + eq(y: Numeric): boolean; + + /** + * Return the (base 10) exponent value of this Decimal (this.e is the base 10000000 exponent). + */ + exponent(): number; + + /** + * Return true if the value of this Decimal is greater than the value of `y`, otherwise return + * false. + */ + greaterThan(y: Numeric): boolean; + + /** + * Return true if the value of this Decimal is greater than the value of `y`, otherwise return + * false. + */ + gt(y: Numeric): boolean; + + /** + * Return true if the value of this Decimal is greater than or equal to the value of `y`, + * otherwise return false. + * + */ + greaterThanOrEqualTo(y: Numeric): boolean; + + /** + * Return true if the value of this Decimal is greater than or equal to the value of `y`, + * otherwise return false. + * + */ + gte(y: Numeric): boolean; + + /** + * Return true if the value of this Decimal is an integer, otherwise return false. + * + */ + isInteger(): boolean; + + /** + * Return true if the value of this Decimal is an integer, otherwise return false. + * + */ + isint(): boolean; + + /** + * Return true if the value of this Decimal is negative, otherwise return false. + * + */ + isNegative(): boolean; + + /** + * Return true if the value of this Decimal is negative, otherwise return false. + * + */ + isneg(): boolean; + + /** + * Return true if the value of this Decimal is positive, otherwise return false. + * + */ + isPositive(): boolean; + + /** + * Return true if the value of this Decimal is positive, otherwise return false. + * + */ + ispos(): boolean; + + /** + * Return true if the value of this Decimal is 0, otherwise return false. + * + */ + isZero(): boolean; + + /** + * Return true if the value of this Decimal is less than `y`, otherwise return false. + * + */ + lessThan(y: Numeric): boolean; + + /** + * Return true if the value of this Decimal is less than `y`, otherwise return false. + * + */ + lt(y: Numeric): boolean; + + /** + * Return true if the value of this Decimal is less than or equal to `y`, otherwise return false. + * + */ + lessThanOrEqualTo(y: Numeric): boolean; + + /** + * Return true if the value of this Decimal is less than or equal to `y`, otherwise return false. + * + */ + lte(y: Numeric): boolean; + + /** + * Return the logarithm of the value of this Decimal to the specified base, truncated to + * `precision` significant digits. + * + * If no base is specified, return log[10](x). + * + * log[base](x) = ln(x) / ln(base) + * + * The maximum error of the result is 1 ulp (unit in the last place). + * + */ + logarithm(base?: Numeric): Decimal; + + /** + * Return the logarithm of the value of this Decimal to the specified base, truncated to + * `precision` significant digits. + * + * If no base is specified, return log[10](x). + * + * log[base](x) = ln(x) / ln(base) + * + * The maximum error of the result is 1 ulp (unit in the last place). + * + */ + log(base?: Numeric): Decimal; + + /** + * Return a new Decimal whose value is the value of this Decimal minus `y`, truncated to + * `precision` significant digits. + * + */ + minus(y: Numeric): Decimal; + + /** + * Return a new Decimal whose value is the value of this Decimal minus `y`, truncated to + * `precision` significant digits. + * + */ + sub(y: Numeric): Decimal; + + /** + * Return a new Decimal whose value is the value of this Decimal modulo `y`, truncated to + * `precision` significant digits. + * + */ + modulo(y: Numeric): Decimal; + + /** + * Return a new Decimal whose value is the value of this Decimal modulo `y`, truncated to + * `precision` significant digits. + * + */ + mod(y: Numeric): Decimal; + + /** + * Return a new Decimal whose value is the natural exponential of the value of this Decimal, + * i.e. the base e raised to the power the value of this Decimal, truncated to `precision` + * significant digits. + * + */ + naturalExponetial(): Decimal; + + /** + * Return a new Decimal whose value is the natural exponential of the value of this Decimal, + * i.e. the base e raised to the power the value of this Decimal, truncated to `precision` + * significant digits. + * + */ + exp(): Decimal; + + /** + * Return a new Decimal whose value is the natural logarithm of the value of this Decimal, + * truncated to `precision` significant digits. + * + */ + naturalLogarithm(): Decimal; + + /** + * Return a new Decimal whose value is the natural logarithm of the value of this Decimal, + * truncated to `precision` significant digits. + * + */ + ln(): Decimal; + + /** + * Return a new Decimal whose value is the value of this Decimal negated, i.e. as if multiplied by + * -1. + * + */ + negated(): Decimal; + + /** + * Return a new Decimal whose value is the value of this Decimal negated, i.e. as if multiplied by + * -1. + * + */ + neg(): Decimal; + + /** + * Return a new Decimal whose value is the value of this Decimal plus `y`, truncated to + * `precision` significant digits. + * + */ + plus(y: Numeric): Decimal; + + /** + * Return a new Decimal whose value is the value of this Decimal plus `y`, truncated to + * `precision` significant digits. + * + */ + add(y: Numeric): Decimal; + + /** + * Return the number of significant digits of the value of this Decimal. + * + * @param zeros {boolean|number} Whether to count integer-part trailing zeros: true, false, 1 or 0. + */ + precision(zeros: boolean|number): number; + + /** + * Return the number of significant digits of the value of this Decimal. + * + * @param zeros {boolean|number} Whether to count integer-part trailing zeros: true, false, 1 or 0. + */ + sd(zeros: boolean|number): number; + + /** + * Return a new Decimal whose value is the square root of this Decimal, truncated to `precision` + * significant digits. + * + */ + squareRoot(): Decimal; + + /** + * Return a new Decimal whose value is the square root of this Decimal, truncated to `precision` + * significant digits. + * + */ + sqrt(): Decimal; + + /** + * Return a new Decimal whose value is the value of this Decimal times `y`, truncated to + * `precision` significant digits. + * + */ + times(y: Numeric): Decimal; + + /** + * Return a new Decimal whose value is the value of this Decimal times `y`, truncated to + * `precision` significant digits. + * + */ + mul(y: Numeric): Decimal; + + /** + * Return a new Decimal whose value is the value of this Decimal rounded to a maximum of `dp` + * decimal places using rounding mode `rm` or `rounding` if `rm` is omitted. + * + * If `dp` is omitted, return a new Decimal whose value is the value of this Decimal. + * + * @param dp {number} Decimal places. Integer, 0 to MAX_DIGITS inclusive. + * @param rm {number} Rounding mode. Integer, 0 to 8 inclusive. + * + */ + toDecimalPlaces(dp?: number, rm?: number): Decimal; + + /** + * Return a new Decimal whose value is the value of this Decimal rounded to a maximum of `dp` + * decimal places using rounding mode `rm` or `rounding` if `rm` is omitted. + * + * If `dp` is omitted, return a new Decimal whose value is the value of this Decimal. + * + * @param dp {number} Decimal places. Integer, 0 to MAX_DIGITS inclusive. + * @param rm {number} Rounding mode. Integer, 0 to 8 inclusive. + * + */ + todp(dp?: number, rm?: number): Decimal; + + /** + * Return a string representing the value of this Decimal in exponential notation rounded to + * `dp` fixed decimal places using rounding mode `rounding`. + * + * @param dp {number} Decimal places. Integer, 0 to MAX_DIGITS inclusive. + * @param rm {number} Rounding mode. Integer, 0 to 8 inclusive. + * + */ + toExponential(dp?: number, rm?: number): string; + + /** + * Return a string representing the value of this Decimal in normal (fixed-point) notation to + * `dp` fixed decimal places and rounded using rounding mode `rm` or `rounding` if `rm` is + * omitted. + * + * As with JavaScript numbers, (-0).toFixed(0) is '0', but e.g. (-0.00001).toFixed(0) is '-0'. + * + * @param dp {number} Decimal places. Integer, 0 to MAX_DIGITS inclusive. + * @param rm {number} Rounding mode. Integer, 0 to 8 inclusive. + * + * (-0).toFixed(0) is '0', but (-0.1).toFixed(0) is '-0'. + * (-0).toFixed(1) is '0.0', but (-0.01).toFixed(1) is '-0.0'. + * (-0).toFixed(3) is '0.000'. + * (-0.5).toFixed(0) is '-0'. + * + */ + toFixed(dp?: number, rm?: number): string; + + /** + * Return a new Decimal whose value is the value of this Decimal rounded to a whole number using + * rounding mode `rounding`. + * + */ + toInteger(): Decimal; + + /** + * Return a new Decimal whose value is the value of this Decimal rounded to a whole number using + * rounding mode `rounding`. + * + */ + toint(): Decimal; + + /** + * Return the value of this Decimal converted to a number primitive. + * + */ + toNumber(): number; + + /** + * Return a new Decimal whose value is the value of this Decimal raised to the power `y`, + * truncated to `precision` significant digits. + * + * For non-integer or very large exponents pow(x, y) is calculated using + * + * x^y = exp(y*ln(x)) + * + * The maximum error is 1 ulp (unit in last place). + * + * @param y {number|string|Decimal} The power to which to raise this Decimal. + * + */ + toPower(y: Numeric): Decimal; + + /** + * Return a new Decimal whose value is the value of this Decimal raised to the power `y`, + * truncated to `precision` significant digits. + * + * For non-integer or very large exponents pow(x, y) is calculated using + * + * x^y = exp(y*ln(x)) + * + * The maximum error is 1 ulp (unit in last place). + * + * @param y {number|string|Decimal} The power to which to raise this Decimal. + * + */ + pow(y: Numeric): Decimal; + + /** + * Return a string representing the value of this Decimal rounded to `sd` significant digits + * using rounding mode `rounding`. + * + * Return exponential notation if `sd` is less than the number of digits necessary to represent + * the integer part of the value in normal notation. + * + * @param sd {number} Significant digits. Integer, 1 to MAX_DIGITS inclusive. + * @param rm {number} Rounding mode. Integer, 0 to 8 inclusive. + * + */ + toPrecision(sd?: number, rm?: number): string; + + /** + * Return a new Decimal whose value is the value of this Decimal rounded to a maximum of `sd` + * significant digits using rounding mode `rm`, or to `precision` and `rounding` respectively if + * omitted. + * + * @param sd {number} Significant digits. Integer, 1 to MAX_DIGITS inclusive. + * @param rm {number} Rounding mode. Integer, 0 to 8 inclusive. + * + */ + toSignificantDigits(sd?: number, rm?: number): Decimal; + + /** + * Return a new Decimal whose value is the value of this Decimal rounded to a maximum of `sd` + * significant digits using rounding mode `rm`, or to `precision` and `rounding` respectively if + * omitted. + * + * @param sd {number} Significant digits. Integer, 1 to MAX_DIGITS inclusive. + * @param rm {number} Rounding mode. Integer, 0 to 8 inclusive. + * + */ + tosd(sd?: number, rm?: number): Decimal; + + /** + * Return a string representing the value of this Decimal. + * + * Return exponential notation if this Decimal has a positive exponent equal to or greater than + * `toExpPos`, or a negative exponent equal to or less than `toExpNeg`. + * + */ + toString(): string; + + /** + * Return a string representing the value of this Decimal. + * + * Return exponential notation if this Decimal has a positive exponent equal to or greater than + * `toExpPos`, or a negative exponent equal to or less than `toExpNeg`. + * + */ + valueOf(): string; + + /** + * Return a string representing the value of this Decimal. + * + * Return exponential notation if this Decimal has a positive exponent equal to or greater than + * `toExpPos`, or a negative exponent equal to or less than `toExpNeg`. + * + */ + val(): string; + + /** + * Return a string representing the value of this Decimal. + * + * Return exponential notation if this Decimal has a positive exponent equal to or greater than + * `toExpPos`, or a negative exponent equal to or less than `toExpNeg`. + * + */ + toJSON(): string; + + /** + * Create and return a Decimal constructor with the same configuration properties as this Decimal + * constructor. + * + * @param config? Config + */ + static clone(config?: Config): typeof Decimal; + + /** + * Configure global settings for a Decimal constructor. + */ + static config(config: Config): Decimal; + + /** + * Configure global settings for a Decimal constructor. + */ + static set(config: Config): Decimal; + + // The maximum number of significant digits of the result of a calculation or base conversion. + // E.g. `Decimal.config({ precision: 20 });` + static precision: number; + + // The rounding mode used by default by `toInteger`, `toDecimalPlaces`, `toExponential`, + // `toFixed`, `toPrecision` and `toSignificantDigits`. + // + // E.g. + // `Decimal.rounding = 4;` + // `Decimal.rounding = Decimal.ROUND_HALF_UP;` + static rounding: number; + static readonly ROUND_UP: number; + static readonly ROUND_DOWN: number; + static readonly ROUND_CEIL: number; + static readonly ROUND_FLOOR: number; + static readonly ROUND_HALF_UP: number; + static readonly ROUND_HALF_DOWN: number; + static readonly ROUND_HALF_EVEN: number; + static readonly ROUND_HALF_CEIL: number; + static readonly ROUND_HALF_FLOOR: number; + + // The exponent value at and beneath which `toString` returns exponential notation. + // JavaScript numbers: -7 + static toExpNeg: number; // 0 to -MAX_E + + // The exponent value at and above which `toString` returns exponential notation. + // JavaScript numbers: 21 + static toExpPos: number; // 0 to MAX_E + + // The natural logarithm of 10. + static LN10: Decimal; +} + +export interface Config { + precision?: number; + rounding?: number; + toExpNeg?: number; + toExpPos?: number; + LN10?: Numeric; +} + +export type Numeric = string|number|Decimal; diff --git a/decimal.d.ts b/decimal.d.ts index bd7bfb1..a725f41 100644 --- a/decimal.d.ts +++ b/decimal.d.ts @@ -1,4 +1,4 @@ -export default Decimal; +export = Decimal; export declare class Decimal { /** diff --git a/package.json b/package.json index 5cb2fdb..a050e30 100644 --- a/package.json +++ b/package.json @@ -20,7 +20,19 @@ "type": "git", "url": "https://github.com/MikeMcl/decimal.js-light.git" }, - "main": "decimal", + "exports": { + ".": { + "import": { + "types": "./decimal.d.mts", + "default": "./decimal.mjs" + }, + "require": { + "types": "./decimal.d.ts", + "default": "./decimal.js" + } + } + }, + "main": "decimal.js", "module": "decimal.mjs", "browser": "decimal.js", "types": "decimal.d.ts",