/** * 统一金额处理工具函数 * 后端存储:int64(分) * 前端展示:角精度(0.1元) */ /** * 将金额四舍五入到角精度(0.1元) * @example roundMoney(12.34) -> 12.3 * @example roundMoney(12.36) -> 12.4 */ export function roundMoney(value: number): number { return Math.round(Number(value || 0) * 10) / 10 } /** * 格式化金额为字符串(保留1位小数) * @example formatMoney(12.3) -> "12.3" * @example formatMoney(12.0) -> "12.0" */ export function formatMoney(value: number | undefined | null): string { const num = Number(value || 0) return roundMoney(num).toFixed(1) } /** * 格式化金额并添加货币符号 * @example formatMoneyWithSymbol(12.3) -> "¥12.3" */ export function formatMoneyWithSymbol(value: number | undefined | null): string { return `¥${formatMoney(value)}` } /** * 分转元(保留2位小数) * @example centToYuan(12345) -> 123.45 */ export function centToYuan(cent: number | undefined | null): number { return Number(cent || 0) / 100 } /** * 分转展示用元(四舍五入到0.1元) * @example centToDisplayYuan(12345) -> 123.5 * @example centToDisplayYuan(12344) -> 123.4 */ export function centToDisplayYuan(cent: number | undefined | null): number { return roundMoney(centToYuan(cent)) } /** * 格式化分为角字符串(保留1位小数) * @example formatCent(12345) -> "123.5" * @example formatCent(12344) -> "123.4" */ export function formatCent(cent: number | undefined | null): string { return centToDisplayYuan(cent).toFixed(1) } /** * 格式化分为角字符串并添加货币符号 * @example formatCentWithSymbol(12345) -> "¥123.5" */ export function formatCentWithSymbol(cent: number | undefined | null): string { return `¥${formatCent(cent)}` } /** * 元转分(四舍五入) * 用户输入金额时使用 * @example yuanToCent(123.45) -> 12345 * @example yuanToCent(123.456) -> 12346 */ export function yuanToCent(yuan: number | undefined | null): number { return Math.round(Number(yuan || 0) * 100) }