/** * 将数字转换为带单位的字符串 * @example * readableNumberUnit(123456.789) // 12.35万 */ export function readableNumberUnit( num: number, unit: "万" | "千万" | "亿" | "auto" = "auto", options?: { precision?: number } ): string { if (num === 0) return "0" const units = ["", "万", "亿"] let absNum = Math.abs(num) let precision = options?.precision || 2 let result let chosenUnit = "" if (unit === "auto") { if (absNum >= 1e8) { chosenUnit = "亿" result = (num / 1e8).toString() } else if (absNum >= 1e4) { chosenUnit = "万" result = (num / 1e4).toString() } else { result = num.toString() } } else { chosenUnit = unit switch (unit) { case "亿": result = (num / 1e8).toString() break case "千万": result = (num / 1e7).toString() break case "万": result = (num / 1e4).toString() break default: result = num.toString() } } // 去掉小数点后不必要的 0 并确保整数部分不进位 if (result.includes(".")) { let [int, decimal] = result.split(".") decimal = decimal.slice(0, precision) result = int + "." + decimal.replace(/0+$/, "") if (result.endsWith(".")) { result = result.slice(0, -1) } } result = result.toString() return result + chosenUnit }