UNPKG

@technobuddha/library

Version:
58 lines 4.54 kB
import { deconstructNumber } from "./deconstruct-number.js"; import { numbering } from "./numbering.js"; import { empty, space } from "./unicode.js"; /** * Convert a number into an ordinal number string (1st, 2nd, 3rd, etc). * @param input - The number to convert * @param options - see {@link OrdinalOptions} * @example * ```typescript * ordinal(1); // "first" * ordinal(2); // "second" * ordinal(3); // "third" * ordinal(21); // "twenty first" * ordinal(101, { and: ' and ' }); // "one hundred and first" * ordinal(2, { output: 'suffix' }); // "nd" * ``` * @group Math * @category Verbalization */ export function ordinal(input, options = {}) { if (options.output === 'suffix') { if (Number.isNaN(input) || !Number.isFinite(input)) { return 'th'; } const { whole } = deconstructNumber(input, Infinity); if (whole.value % 10 === 1 && whole.value % 100 !== 11) { return 'st'; } else if (whole.value % 10 === 2 && whole.value % 100 !== 12) { return 'nd'; } else if (whole.value % 10 === 3 && whole.value % 100 !== 13) { return 'rd'; } return 'th'; } const numberingOptions = { output: { integer: ((options?.output === 'alphabetic' || options?.output === 'numeric' || options?.output === 'hybrid') ? options.output : options.output?.integer) ?? 'numeric', fraction: (options?.output === 'alphabetic' || options?.output === 'numeric' ? options.output : options?.output === 'hybrid' ? 'alphabetic' : options.output?.fraction) ?? 'numeric', }, and: options?.and ?? empty, hyphen: options?.hyphen ?? space, tolerance: options?.tolerance ?? 0.01, denominators: options?.denominators ?? 'common', precision: options?.precision ?? 9, ordinal: options?.ordinal ?? true, shift: options?.shift ?? false, }; return numbering(input, numberingOptions); } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JkaW5hbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9vcmRpbmFsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQzVELE9BQU8sRUFBa0IsU0FBUyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0QsT0FBTyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsTUFBTSxjQUFjLENBQUM7QUF3RDVDOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUNILE1BQU0sVUFBVSxPQUFPLENBQUMsS0FBYSxFQUFFLFVBQTBCLEVBQUU7SUFDakUsSUFBSSxPQUFPLENBQUMsTUFBTSxLQUFLLFFBQVEsRUFBRSxDQUFDO1FBQ2hDLElBQUksTUFBTSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNuRCxPQUFPLElBQUksQ0FBQztRQUNkLENBQUM7UUFFRCxNQUFNLEVBQUUsS0FBSyxFQUFFLEdBQUcsaUJBQWlCLENBQUMsS0FBSyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1FBRXJELElBQUksS0FBSyxDQUFDLEtBQUssR0FBRyxFQUFFLEtBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQyxLQUFLLEdBQUcsR0FBRyxLQUFLLEVBQUUsRUFBRSxDQUFDO1lBQ3ZELE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQzthQUFNLElBQUksS0FBSyxDQUFDLEtBQUssR0FBRyxFQUFFLEtBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQyxLQUFLLEdBQUcsR0FBRyxLQUFLLEVBQUUsRUFBRSxDQUFDO1lBQzlELE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQzthQUFNLElBQUksS0FBSyxDQUFDLEtBQUssR0FBRyxFQUFFLEtBQUssQ0FBQyxJQUFJLEtBQUssQ0FBQyxLQUFLLEdBQUcsR0FBRyxLQUFLLEVBQUUsRUFBRSxDQUFDO1lBQzlELE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUVELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztJQUVELE1BQU0sZ0JBQWdCLEdBQWM7UUFDbEMsTUFBTSxFQUFFO1lBQ04sT0FBTyxFQUNMLENBQUMsQ0FDQyxPQUFPLEVBQUUsTUFBTSxLQUFLLFlBQVk7Z0JBQ2hDLE9BQU8sRUFBRSxNQUFNLEtBQUssU0FBUztnQkFDN0IsT0FBTyxFQUFFLE1BQU0sS0FBSyxRQUFRLENBQzdCLENBQUMsQ0FBQztnQkFDRCxPQUFPLENBQUMsTUFBTTtnQkFDaEIsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLElBQUksU0FBUztZQUN6QyxRQUFRLEVBQ04sQ0FBQyxPQUFPLEVBQUUsTUFBTSxLQUFLLFlBQVksSUFBSSxPQUFPLEVBQUUsTUFBTSxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU07Z0JBQ25GLENBQUMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsWUFBWTtvQkFDN0MsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLElBQUksU0FBUztTQUMzQztRQUNELEdBQUcsRUFBRSxPQUFPLEVBQUUsR0FBRyxJQUFJLEtBQUs7UUFDMUIsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLElBQUksS0FBSztRQUNoQyxTQUFTLEVBQUUsT0FBTyxFQUFFLFNBQVMsSUFBSSxJQUFJO1FBQ3JDLFlBQVksRUFBRSxPQUFPLEVBQUUsWUFBWSxJQUFJLFFBQVE7UUFDL0MsU0FBUyxFQUFFLE9BQU8sRUFBRSxTQUFTLElBQUksQ0FBQztRQUNsQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sSUFBSSxJQUFJO1FBQ2pDLEtBQUssRUFBRSxPQUFPLEVBQUUsS0FBSyxJQUFJLEtBQUs7S0FDL0IsQ0FBQztJQUVGLE9BQU8sU0FBUyxDQUFDLEtBQUssRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO0FBQzVDLENBQUMifQ==