@technobuddha/library
Version: 
A large library of useful functions
43 lines • 3.3 kB
JavaScript
import { numbering } from "./numbering.js";
import { empty, space } from "./unicode.js";
/**
 * Convert a number into text (the cardinal number)
 * @remarks There is no limit to the numbers that can be expressed, however Javascript/Typescript can only represent numbers
 * up to uncentillions (1e308).
 * @param input - The number
 * @param options - see {@link CardinalOptions}
 * @returns The number spelled out
 * @example
 * ```typescript
 * cardinal(123); // "one hundred twenty three"
 * cardinal(123, { hyphen: '-' }); // "one hundred twenty-three"
 * cardinal(42.5, { output: 'alphabetic' }); // "forty two and one half"
 * cardinal(101, { and: ' and ' }); // "one hundred and one"
 * cardinal(3.14159, { precision: 2 }); // "three and fourteen hundredths"
 * ```
 * @group Math
 * @category Verbalization
 */
export function cardinal(input, options = {}) {
    const numberingOptions = {
        output: {
            integer: ((options?.output === 'alphabetic' ||
                options?.output === 'numeric' ||
                options?.output === 'hybrid') ?
                options.output
                : options.output?.integer) ?? 'alphabetic',
            fraction: (options?.output === 'alphabetic' || options?.output === 'numeric' ? options.output
                : options?.output === 'hybrid' ? 'alphabetic'
                    : options.output?.fraction) ?? 'alphabetic',
        },
        and: options?.and ?? empty,
        hyphen: options?.hyphen ?? space,
        tolerance: options?.tolerance ?? 0.01,
        denominators: options?.denominators ?? 'common',
        precision: options?.precision ?? 6,
        ordinal: options?.ordinal ?? false,
        shift: options?.shift ?? false,
    };
    return numbering(input, numberingOptions);
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2FyZGluYWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvY2FyZGluYWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFrQixTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzRCxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLGNBQWMsQ0FBQztBQXdENUM7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBaUJHO0FBQ0gsTUFBTSxVQUFVLFFBQVEsQ0FBQyxLQUFhLEVBQUUsVUFBMkIsRUFBRTtJQUNuRSxNQUFNLGdCQUFnQixHQUFjO1FBQ2xDLE1BQU0sRUFBRTtZQUNOLE9BQU8sRUFDTCxDQUFDLENBQ0MsT0FBTyxFQUFFLE1BQU0sS0FBSyxZQUFZO2dCQUNoQyxPQUFPLEVBQUUsTUFBTSxLQUFLLFNBQVM7Z0JBQzdCLE9BQU8sRUFBRSxNQUFNLEtBQUssUUFBUSxDQUM3QixDQUFDLENBQUM7Z0JBQ0QsT0FBTyxDQUFDLE1BQU07Z0JBQ2hCLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxJQUFJLFlBQVk7WUFDNUMsUUFBUSxFQUNOLENBQUMsT0FBTyxFQUFFLE1BQU0sS0FBSyxZQUFZLElBQUksT0FBTyxFQUFFLE1BQU0sS0FBSyxTQUFTLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNO2dCQUNuRixDQUFDLENBQUMsT0FBTyxFQUFFLE1BQU0sS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLFlBQVk7b0JBQzdDLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxJQUFJLFlBQVk7U0FDOUM7UUFDRCxHQUFHLEVBQUUsT0FBTyxFQUFFLEdBQUcsSUFBSSxLQUFLO1FBQzFCLE1BQU0sRUFBRSxPQUFPLEVBQUUsTUFBTSxJQUFJLEtBQUs7UUFDaEMsU0FBUyxFQUFFLE9BQU8sRUFBRSxTQUFTLElBQUksSUFBSTtRQUNyQyxZQUFZLEVBQUUsT0FBTyxFQUFFLFlBQVksSUFBSSxRQUFRO1FBQy9DLFNBQVMsRUFBRSxPQUFPLEVBQUUsU0FBUyxJQUFJLENBQUM7UUFDbEMsT0FBTyxFQUFFLE9BQU8sRUFBRSxPQUFPLElBQUksS0FBSztRQUNsQyxLQUFLLEVBQUUsT0FBTyxFQUFFLEtBQUssSUFBSSxLQUFLO0tBQy9CLENBQUM7SUFFRixPQUFPLFNBQVMsQ0FBQyxLQUFLLEVBQUUsZ0JBQWdCLENBQUMsQ0FBQztBQUM1QyxDQUFDIn0=