/** * 金额单位转换:元 -> 万元 * @param val 原始金额(元) * @param digit 保留小数位数,默认为 2 * @returns 转换后的字符串(万元) */ export const formatAmount = (val: any, digit: number = 2) => { if (val === undefined || val === null || val === '') return '0.00'; const num = Number(val); if (isNaN(num)) return '0.00'; return (num / 10000).toFixed(digit); }; /** * 金额千分位格式化 * @param val 原始金额 * @param digit 保留小数位数 * @returns 格式化后的字符串 (如: 1,234.56) */ export const formatWithComma = (val: any, digit: number = 2) => { if (val === undefined || val === null || val === '') return '0.00'; const num = Number(val); if (isNaN(num)) return '0.00'; const options = { minimumFractionDigits: digit, maximumFractionDigits: digit, }; return num.toLocaleString('en-US', options); }; /** * 限制输入正数且最多两位小数的格式化工具 * 常用于 uv-input 的 formatter 属性 * @param val 输入字符串 * @returns 格式化后的字符串 */ export const amountInputFormatter = (val: string) => { if (!val) return ''; // 1. 仅保留数字和小数点 let formatted = val.replace(/[^\d.]/g, ''); // 2. 保证只有一个小数点 const dotIndex = formatted.indexOf('.'); if (dotIndex !== -1) { const mainPart = formatted.substring(0, dotIndex); let decimalPart = formatted.substring(dotIndex + 1).replace(/\./g, ''); // 移除多余小数点 // 3. 限制两位小数 if (decimalPart.length > 2) { decimalPart = decimalPart.substring(0, 2); } formatted = `${mainPart}.${decimalPart}`; } return formatted; };