export const MONEY_UNITS_PER_YUAN = 10_000; export function formatAmount(value: number) { return value.toLocaleString('zh-CN', { minimumFractionDigits: 0, maximumFractionDigits: 4, }); } export function formatRateAmount(value: number) { return value.toLocaleString('zh-CN', { minimumFractionDigits: 4, maximumFractionDigits: 4 }); } export function formatCents(cents?: number | null) { 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; }