feat: improve application access and money precision

This commit is contained in:
hectorzhao
2026-07-16 17:54:05 +08:00
parent 9d5c507007
commit faa716b8d0
49 changed files with 1699 additions and 489 deletions
+21 -3
View File
@@ -1,14 +1,32 @@
export const MONEY_UNITS_PER_YUAN = 10_000;
export function formatAmount(value: number) {
return value.toLocaleString('zh-CN', {
minimumFractionDigits: 3,
maximumFractionDigits: 3,
minimumFractionDigits: 4,
maximumFractionDigits: 4,
});
}
export function formatCents(cents?: number | null) {
return formatAmount((cents ?? 0) / 100);
return formatAmount((cents ?? 0) / MONEY_UNITS_PER_YUAN);
}
export function formatYuan(cents?: number | null) {
return `¥${formatCents(cents)}`;
}
export function yuanToMoneyUnits(value: number | string | null | undefined) {
const amount = typeof value === 'string' ? Number(value) : (value ?? 0);
return Math.round(amount * MONEY_UNITS_PER_YUAN);
}
export function isValidMoneyInput(value: string, options: { allowNegative?: boolean; allowZero?: boolean } = {}) {
const normalized = value.trim();
const pattern = options.allowNegative ? /^-?\d+(?:\.\d{1,4})?$/ : /^\d+(?:\.\d{1,4})?$/;
if (!pattern.test(normalized)) return false;
return options.allowZero !== false || Number(normalized) !== 0;
}
export function moneyUnitsToYuan(value?: number | null) {
return (value ?? 0) / MONEY_UNITS_PER_YUAN;
}