/** * 业务计算工具函数 */ /** * 计算佣金 * @param amount 交易金额(分) * @param rate 佣金比例(0-100) * @param type 佣金类型:percentage-百分比, fixed-固定金额 */ export function calculateCommission( amount: number, rate: number, type: 'percentage' | 'fixed' = 'percentage' ): number { if (type === 'fixed') { return rate } return Math.floor((amount * rate) / 100) } /** * 计算折扣价 * @param originalPrice 原价(分) * @param discount 折扣(0-100) */ export function calculateDiscountPrice(originalPrice: number, discount: number): number { return Math.floor((originalPrice * discount) / 100) } /** * 计算流量使用率 * @param used 已用流量(MB) * @param total 总流量(MB) */ export function calculateFlowUsageRate(used: number, total: number): number { if (total === 0) return 0 return Math.min(100, Math.round((used / total) * 100)) } /** * 计算剩余天数 * @param expireTime 过期时间 */ export function calculateRemainingDays(expireTime: string): number { const now = new Date().getTime() const expire = new Date(expireTime).getTime() const diff = expire - now if (diff <= 0) return 0 return Math.ceil(diff / (1000 * 60 * 60 * 24)) } /** * 计算环比增长率 * @param current 当前值 * @param previous 上期值 */ export function calculateGrowthRate(current: number, previous: number): number { if (previous === 0) return current > 0 ? 100 : 0 return Math.round(((current - previous) / previous) * 100) } /** * 计算平均值 * @param values 数值数组 */ export function calculateAverage(values: number[]): number { if (values.length === 0) return 0 const sum = values.reduce((acc, val) => acc + val, 0) return Math.round((sum / values.length) * 100) / 100 } /** * 计算提现手续费 * @param amount 提现金额(分) * @param feeRate 手续费率(0-100) * @param feeType 手续费类型:percentage-百分比, fixed-固定 */ export function calculateWithdrawalFee( amount: number, feeRate: number, feeType: 'percentage' | 'fixed' = 'percentage' ): number { if (feeType === 'fixed') { return feeRate } return Math.floor((amount * feeRate) / 100) } /** * 计算实际到账金额 * @param amount 提现金额(分) * @param fee 手续费(分) */ export function calculateActualAmount(amount: number, fee: number): number { return Math.max(0, amount - fee) } /** * 计算分页偏移量 * @param page 当前页 * @param pageSize 每页数量 */ export function calculateOffset(page: number, pageSize: number): number { return (page - 1) * pageSize } /** * 计算总页数 * @param total 总记录数 * @param pageSize 每页数量 */ export function calculateTotalPages(total: number, pageSize: number): number { return Math.ceil(total / pageSize) }