30 lines
854 B
TypeScript
30 lines
854 B
TypeScript
export function asNumber(value: string | number | null | undefined) {
|
|
if (value === null || value === undefined) {
|
|
return 0;
|
|
}
|
|
|
|
const parsed = typeof value === 'number' ? value : Number(value);
|
|
return Number.isFinite(parsed) ? parsed : 0;
|
|
}
|
|
|
|
export function formatCurrency(value: string | number | null | undefined) {
|
|
return new Intl.NumberFormat('en-US', {
|
|
style: 'currency',
|
|
currency: 'USD',
|
|
maximumFractionDigits: 2
|
|
}).format(asNumber(value));
|
|
}
|
|
|
|
export function formatPercent(value: string | number | null | undefined) {
|
|
return `${asNumber(value).toFixed(2)}%`;
|
|
}
|
|
|
|
export function formatCompactCurrency(value: string | number | null | undefined) {
|
|
return new Intl.NumberFormat('en-US', {
|
|
style: 'currency',
|
|
currency: 'USD',
|
|
notation: 'compact',
|
|
maximumFractionDigits: 2
|
|
}).format(asNumber(value));
|
|
}
|