UNPKG

@modern-kit/utils

Version:
43 lines (40 loc) 1.61 kB
import { formatNumberWithCommas } from '../formatNumberWithCommas/index.mjs'; import { isNumber } from '../../validator/isNumber/index.mjs'; const formatNumberWithConditionalCommas = (value, commas) => { return commas ? formatNumberWithCommas(value) : value; }; const getFormattedNumberWithUnits = (value, options) => { const { units, commas = true, decimal = 0 } = options; const sortedUnits = [...units].sort((a, b) => b.value - a.value); const absoluteValue = Math.abs(value); const negativeSign = value < 0 ? "-" : ""; let formattedResult = ""; let remainingValue = absoluteValue; for (let i = 0; i < sortedUnits.length; i++) { const { unit, value: unitValue } = units[i]; const quotient = Math.floor(remainingValue / unitValue); const space = " "; if (quotient <= 0) continue; formattedResult += `${formatNumberWithConditionalCommas( quotient, commas )}${unit}${space}`; remainingValue %= unitValue; } if (remainingValue > 0) { formattedResult += `${formatNumberWithConditionalCommas( remainingValue.toFixed(decimal), commas )}`; } return `${negativeSign}${formattedResult.trim()}`; }; function formatNumberWithUnits(value, options) { const valueToUse = isNumber(value) ? value : Number(value); if (isNaN(valueToUse)) { throw new Error("value\uB294 \uC22B\uC790 \uD639\uC740 \uC22B\uC790\uB85C \uC774\uB904\uC9C4 \uBB38\uC790\uC5F4\uC774\uC5EC\uC57C \uD569\uB2C8\uB2E4."); } return getFormattedNumberWithUnits(valueToUse, options); } export { formatNumberWithUnits }; //# sourceMappingURL=index.mjs.map