/** 把接口里的金额(number / 数字字符串 / Prisma Decimal 残影)转成有限数字 */ export function toMoneyNumber(value: unknown): number { if (typeof value === 'number') return Number.isFinite(value) ? value : 0; if (typeof value === 'string' && value.trim()) { const n = Number(value); return Number.isFinite(n) ? n : 0; } if (value && typeof value === 'object') { const o = value as { toNumber?: () => number; toString?: () => string; d?: unknown }; if (typeof o.toNumber === 'function') { const n = Number(o.toNumber()); if (Number.isFinite(n)) return n; } if (typeof o.toString === 'function' && o.toString !== Object.prototype.toString) { const n = Number(o.toString()); if (Number.isFinite(n)) return n; } } return 0; } export function formatMoney(n: number) { return toMoneyNumber(n).toLocaleString('zh-CN', { minimumFractionDigits: 2, maximumFractionDigits: 2, }); }