do to formatters
This commit is contained in:
31
apps/website/lib/formatters/NumberFormatter.ts
Normal file
31
apps/website/lib/formatters/NumberFormatter.ts
Normal file
@@ -0,0 +1,31 @@
|
||||
/**
|
||||
* NumberDisplay
|
||||
*
|
||||
* Deterministic number formatting for display.
|
||||
* Avoids Intl and toLocaleString to prevent SSR/hydration mismatches.
|
||||
*/
|
||||
|
||||
export class NumberFormatter {
|
||||
/**
|
||||
* Formats a number with thousands separators (commas).
|
||||
* Example: 1234567 -> "1,234,567"
|
||||
*/
|
||||
static format(value: number): string {
|
||||
const parts = value.toString().split('.');
|
||||
parts[0] = parts[0].replace(/\B(?=(\d{3})+(?!\d))/g, ',');
|
||||
return parts.join('.');
|
||||
}
|
||||
|
||||
/**
|
||||
* Formats a number in compact form (e.g., 1.2k, 1.5M).
|
||||
*/
|
||||
static formatCompact(value: number): string {
|
||||
if (value >= 1000000) {
|
||||
return `${(value / 1000000).toFixed(1)}M`;
|
||||
}
|
||||
if (value >= 1000) {
|
||||
return `${(value / 1000).toFixed(1)}k`;
|
||||
}
|
||||
return value.toString();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user