51 lines
1.5 KiB
TypeScript
51 lines
1.5 KiB
TypeScript
const compactFormatter = Intl.NumberFormat("en", { notation: "compact", compactDisplay: "short" });
|
|
|
|
export const formatNumberCompact = (num: number): string => {
|
|
return compactFormatter.format(num);
|
|
};
|
|
|
|
const formatter = Intl.NumberFormat("en");
|
|
|
|
// Formatter for small decimal values that need more precision
|
|
const preciseFormatter = Intl.NumberFormat("en", {
|
|
minimumSignificantDigits: 1,
|
|
maximumSignificantDigits: 6,
|
|
});
|
|
|
|
export const formatNumber = (num: number): string => {
|
|
// For very small numbers (between -1 and 1, exclusive), use precise formatting
|
|
// to avoid rounding 0.000025 to 0
|
|
if (num !== 0 && Math.abs(num) < 1) {
|
|
return preciseFormatter.format(num);
|
|
}
|
|
return formatter.format(num);
|
|
};
|
|
|
|
const roundedCurrencyFormatter = Intl.NumberFormat("en-US", {
|
|
style: "currency",
|
|
currencyDisplay: "symbol",
|
|
maximumFractionDigits: 0,
|
|
currency: "USD",
|
|
});
|
|
const currencyFormatter = Intl.NumberFormat("en-US", {
|
|
style: "currency",
|
|
currencyDisplay: "symbol",
|
|
currency: "USD",
|
|
});
|
|
|
|
export const formatCurrency = (num: number, rounded: boolean): string => {
|
|
return rounded ? roundedCurrencyFormatter.format(num) : currencyFormatter.format(num);
|
|
};
|
|
|
|
const accurateCurrencyFormatter = Intl.NumberFormat("en-US", {
|
|
style: "currency",
|
|
currencyDisplay: "symbol",
|
|
minimumFractionDigits: 8,
|
|
maximumFractionDigits: 8,
|
|
currency: "USD",
|
|
});
|
|
|
|
export function formatCurrencyAccurate(num: number): string {
|
|
return accurateCurrencyFormatter.format(num);
|
|
}
|