Numbers
Rounding, clamping, formatting, safe arithmetic. Import from @mongez/reinforcements.
Rounding with precision
round(value: number, precision?: number): number // default 2; rounds half-upfloor(value: number, precision?: number): number // default 0ceil(value: number, precision?: number): number // default 0toFixed(value: number, precision?: number): number // returns number, not stringround(1.235, 2); // 1.24round(1.5, 0); // 2 (true rounding, not floor)floor(1.99, 1); // 1.9ceil(1.01, 1); // 1.1toFixed(1.236, 2); // 1.24 (number, not "1.24")Range helpers
clamp(value: number, min: number, max: number): numberinRange(value: number, min: number, max: number, options?: { inclusive?: boolean }): booleanlerp(a: number, b: number, t: number): numberclamp normalizes swapped bounds. inRange defaults to inclusive: true.
clamp(15, 0, 10); // 10clamp(-3, 0, 10); // 0inRange(5, 0, 10); // trueinRange(10, 0, 10, { inclusive: false }); // falselerp(0, 100, 0.25); // 25Safe arithmetic
safeDivide
safeDivide<F = number>(a: number, b: number, fallback?: F): number | FReturns fallback (default 0) when b === 0 or the result isn’t finite.
safeDivide(10, 2); // 5safeDivide(10, 0); // 0safeDivide(10, 0, null); // nullpercentage
percentage(value: number, total: number, decimals?: number): number // default 2percentage(25, 200); // 12.5percentage(7, 9, 1); // 77.8percentage(1, 0); // 0 (safe on divide-by-zero)parseNumber
parseNumber<F = number>(value: unknown, fallback?: F): number | FReturns fallback (default 0) for null / undefined / "" / non-numeric input.
parseNumber("42"); // 42parseNumber("abc", -1); // -1parseNumber(null, 0); // 0Formatting
formatBytes
formatBytes(bytes: number, options?: { decimals?: number; // default 2 binary?: boolean; // default false (use 1000-based units)}): stringformatBytes(1500); // "1.50 KB"formatBytes(1024, { binary: true, decimals: 0 }); // "1 KiB"formatBytes(-1500, { decimals: 0 }); // "-2 KB"formatBytes(0); // "0 B"formatNumber
formatNumber(value: number, options?: Intl.NumberFormatOptions & { locale?: string | string[];}): stringThin wrapper around Intl.NumberFormat.
formatNumber(1234.5); // "1,234.5"formatNumber(0.42, { style: "percent" }); // "42%"formatNumber(99, { style: "currency", currency: "USD" }); // "$99.00"formatNumber(1234, { locale: "ar-EG" }); // "١٬٢٣٤"