UNPKG

@technobuddha/library

Version:
45 lines 3.48 kB
import { numbering } from "./numbering.js"; import { empty, space } from "./unicode.js"; /** * Converts a numeric input into a formatted fraction string, either in numeric or alphabetic form. * * The function finds the closest matching fraction from a predefined list and formats the output * based on the specified options. If the input is negative, the result is prefixed accordingly. * The output can be either a numeric representation (e.g., "1 1⁄2") or an alphabetic representation * (e.g., "one and one half"). * @param input - The number to convert to a fraction string. * @param options - An optional object specifying the output format. * @returns The formatted fraction string. * @example * ```typescript * fraction(1.5); // "one and one half" * fraction(2.75, { output: 'numeric' }); // "2 3⁄4" * fraction(-0.25, { output: 'alphabetic' }); // "negative one quarter" * fraction(0.333, { precision: 2 }); // "one third" * ``` * @group Math * @category Verbalization */ export function fraction(input, options = {}) { 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 ?? 6, ordinal: options?.ordinal ?? false, shift: options?.shift ?? false, }; return numbering(input, numberingOptions); } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnJhY3Rpb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvZnJhY3Rpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFrQixTQUFTLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUMzRCxPQUFPLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLGNBQWMsQ0FBQztBQXlENUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FtQkc7QUFDSCxNQUFNLFVBQVUsUUFBUSxDQUFDLEtBQWEsRUFBRSxVQUEyQixFQUFFO0lBQ25FLE1BQU0sZ0JBQWdCLEdBQWM7UUFDbEMsTUFBTSxFQUFFO1lBQ04sT0FBTyxFQUNMLENBQUMsQ0FDQyxPQUFPLEVBQUUsTUFBTSxLQUFLLFlBQVk7Z0JBQ2hDLE9BQU8sRUFBRSxNQUFNLEtBQUssU0FBUztnQkFDN0IsT0FBTyxFQUFFLE1BQU0sS0FBSyxRQUFRLENBQzdCLENBQUMsQ0FBQztnQkFDRCxPQUFPLENBQUMsTUFBTTtnQkFDaEIsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLElBQUksU0FBUztZQUN6QyxRQUFRLEVBQ04sQ0FBQyxPQUFPLEVBQUUsTUFBTSxLQUFLLFlBQVksSUFBSSxPQUFPLEVBQUUsTUFBTSxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU07Z0JBQ25GLENBQUMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsWUFBWTtvQkFDN0MsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLElBQUksU0FBUztTQUMzQztRQUNELEdBQUcsRUFBRSxPQUFPLEVBQUUsR0FBRyxJQUFJLEtBQUs7UUFDMUIsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLElBQUksS0FBSztRQUNoQyxTQUFTLEVBQUUsT0FBTyxFQUFFLFNBQVMsSUFBSSxJQUFJO1FBQ3JDLFlBQVksRUFBRSxPQUFPLEVBQUUsWUFBWSxJQUFJLFFBQVE7UUFDL0MsU0FBUyxFQUFFLE9BQU8sRUFBRSxTQUFTLElBQUksQ0FBQztRQUNsQyxPQUFPLEVBQUUsT0FBTyxFQUFFLE9BQU8sSUFBSSxLQUFLO1FBQ2xDLEtBQUssRUFBRSxPQUFPLEVBQUUsS0FBSyxJQUFJLEtBQUs7S0FDL0IsQ0FBQztJQUVGLE9BQU8sU0FBUyxDQUFDLEtBQUssRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDO0FBQzVDLENBQUMifQ==