/** * Format a number with significant digits * @param value The number to format * @param digits Number of significant digits (default: 3) * @returns Formatted string with appropriate suffix (k, M, B) */ export function formatSignificantDigits(value: number, digits = 3): string { if (value === 0) return "0"; const absValue = Math.abs(value); const sign = value < 0 ? "-" : ""; // Determine the order of magnitude if (absValue >= 1_000_000_000) { // Billions const billions = absValue / 1_000_000_000; return `${sign}${billions.toPrecision(digits)}B`; } else if (absValue >= 1_000_000) { // Millions const millions = absValue / 1_000_000; return `${sign}${millions.toPrecision(digits)}M`; } else if (absValue >= 1_000) { // Thousands const thousands = absValue / 1_000; return `${sign}${thousands.toPrecision(digits)}k`; } else { // Less than 1000 return `${sign}${absValue.toPrecision(Math.min(digits, Math.ceil(Math.log10(absValue + 1))))}`; } }