UNPKG

format-num-util

Version:

A utility function to format numbers with currency, unit and millify support.

46 lines (37 loc) 1.63 kB
/** * Formats a number with commas, optional currency symbol, unit, and compact/millified format. * * @param {Object} options * @param {number|string} options.num - Number to format * @param {string} [options.unit] - Optional unit like kg, km * @param {string} [options.curr] - Optional currency symbol like ₹ or $ * @param {boolean} [options.millify=false] - Whether to shorten large numbers (e.g. 1K, 1M) * @returns {string} Formatted number string */ export default function formatNum({ num, unit, curr, millify = false }) { if (num === null || num === undefined || num === '') return '-'; const parsedNumber = parseFloat(num); if (isNaN(parsedNumber)) return '-'; const isNegative = parsedNumber < 0; const absoluteNumber = Math.abs(parsedNumber); const millifyNumber = (n) => { const suffixes = ['', 'K', 'M', 'B', 'T']; if (n < 1000) return n.toString(); let i = 0; let value = n; while (value >= 1000 && i < suffixes.length - 1) { value /= 1000; i++; } return value.toFixed(1).replace(/\.0$/, '') + suffixes[i]; }; const integerPart = parseInt(absoluteNumber.toFixed(2), 10); const decimalPart = (absoluteNumber % 1).toFixed(2).slice(2); const formattedNumber = integerPart.toLocaleString('en-IN') + (decimalPart !== '00' ? `.${decimalPart}` : ''); return ( (isNegative ? '-' : '') + (curr ? curr : '') + (millify ? millifyNumber(absoluteNumber) : formattedNumber) + (unit ? ` ${unit}` : '') ); }