import { BigNumberInput, BigNumberRawValue, IBigNumber } from "@medusajs/types";
import { BigNumber as BigNumberConstructor } from "bignumber.js";
type BigNumberJS = InstanceType<typeof BigNumberConstructor>;
declare const BigNumberJS: typeof globalThis.BigNumber;
export declare class BigNumber implements IBigNumber {
    static DEFAULT_PRECISION: number;
    private numeric_;
    private raw_?;
    private bignumber_?;
    constructor(rawValue: BigNumberInput | BigNumber, options?: {
        precision?: number;
    });
    setRawValueOrThrow(rawValue: BigNumberInput | BigNumber, { precision }?: {
        precision?: number;
    }): void;
    get numeric(): number;
    set numeric(value: BigNumberInput);
    get raw(): BigNumberRawValue | undefined;
    get bigNumber(): BigNumberJS | undefined;
    set raw(rawValue: BigNumberInput);
    toJSON(): number;
    valueOf(): number;
    /**
     * Explicit string coercion. Without this, `.toString()` falls through to
     * `Object.prototype.toString` and returns "[object Object]", silently
     * breaking callers such as `parseFloat(bn.toString())` (returns `NaN`).
     * This is the single source of truth for string coercion — the
     * `[Symbol.toPrimitive]` "string" hint delegates to it so the two stay
     * consistent.
     */
    toString(): string;
    [Symbol.toPrimitive](hint: any): string | number;
}
export declare const MEDUSA_EPSILON: BigNumber;
export declare const MEDUSA_DEFAULT_CURRENCY_EPSILON: BigNumber;
export declare const getEpsilonFromDecimalPrecision: (decimalDigits?: number) => BigNumber;
export {};
//# sourceMappingURL=big-number.d.ts.map