UNPKG

polish-number-to-words

Version:

Spell numbers using words in Polish | Napisz liczbę słownie po polsku

60 lines (59 loc) 2.59 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.numberToWordsPL = void 0; const _utils_1 = require("./_utils"); const decimalFractionToWords_1 = require("./decimalFractionToWords"); const integerToWords_1 = require("./integerToWords"); const SPECIAL_FRACTION_FORMS = { [1.5]: 'półtorej', [0.5]: 'pół', [0.25]: 'ćwierć', }; /** * Converts a number into its Polish word form. * Handles integers, fractions, and combinations, with support for informal forms and custom options. * * @param num The number to convert (e.g., 123, 0.5, 2.25, -1). * @param options Optional settings to control formatting behavior. * @returns The number expressed in Polish words. */ function numberToWordsPL(num, options) { const optionsWithDefaults = { informalFraction: false, informalFractionFormIndividualNumberThreshold: 4, simplifyFraction: false, useSingleWordFractions: false, ...(options ?? {}), }; const isNegative = num < 0; num = Math.abs(num); const integerPart = Math.floor(num); const integerPartStr = (0, integerToWords_1.integerToWordsPL)(integerPart); if (Number.isInteger(num)) { return (isNegative ? 'minus ' : '') + integerPartStr; } if (optionsWithDefaults.informalFraction && optionsWithDefaults.useSingleWordFractions && SPECIAL_FRACTION_FORMS[num]) { return (isNegative ? 'minus ' : '') + SPECIAL_FRACTION_FORMS[num]; } const decimalPlaces = (0, _utils_1.getDecimalPlaces)(num); const fractionPart = roundToPrecision(num % 1, decimalPlaces); const fractionPartStr = (0, decimalFractionToWords_1.decimalFractionToWordsPL)(fractionPart, { informal: optionsWithDefaults.informalFraction, informalFormIndividualNumberThreshold: optionsWithDefaults.informalFractionFormIndividualNumberThreshold, simplifyFraction: optionsWithDefaults.simplifyFraction, }); const fractionPartUsesPrzecinek = /przecinek/.test(fractionPartStr); const isIntegerZero = integerPart === 0; const keepIntegerPart = fractionPartUsesPrzecinek || !isIntegerZero; return ((isNegative ? 'minus ' : '') + (keepIntegerPart ? integerPartStr + ' ' : '') + (fractionPartUsesPrzecinek || isIntegerZero ? '' : 'i ') + fractionPartStr); } exports.numberToWordsPL = numberToWordsPL; function roundToPrecision(value, precision) { const factor = Math.pow(10, precision); return Math.round(value * factor) / factor; }