/** * 把数字转换成可读的数字 * 可以为小数和整数分别设置显示位数 * * @example * readableNumber(123456.789) // 123456.789 * readableNumber(123456.789, { fixedInt: 5 }) // 00123 * readableNumber(123456.789, { fixedInt: 5, fillString: "*" }) // ****1.22 * * @param num * @param options.fixedInt 整数位数,不足补 0(根据 fillString),超出则不处理 * @param options.fixedDecimal 小数位数,不足补 0,超出四舍五入 * @param options.detailed 快速设置为适合详细对比数字信息的格式,相当于 fixedInt:4, fixedDecimal:3 fillString:" " * @param options.fillString 用于整数补位的符号,默认为 " ",如果为 "0" 会在有负号时把负号移到补位前 */ export function readableNumber( num: number | string, options?: { fixedInt?: number fixedDecimal?: number detailed?: boolean fillString?: string unit?: "万" | "亿" | "千" | "K" } ) { if (num === undefined) return num let fixedInt = options?.fixedInt let fixedDecimal = options?.fixedDecimal let fillString = options?.fillString || "0" if (options?.detailed) { fixedInt = 4 fixedDecimal = 3 fillString = " " } if (fixedInt == undefined && fixedDecimal == undefined) { if (typeof num === "string") num = parseFloat(num) return num.toFixed(3) } else { let numStr = num.toString() let [int, decimal] = numStr.split(".") let fillIsZero = fillString === "0" if (fixedInt) { int = int.padStart(fixedInt, fillString) } // 00-2.00 -> -002.00 if (fillIsZero) { let negativeIndex = int.indexOf("-") if (negativeIndex > 0) { int = "-" + int.slice(0, negativeIndex) + int.slice(negativeIndex + 1) } } if (fixedDecimal !== undefined) { if (decimal) { decimal = decimal.slice(0, fixedDecimal) if (decimal.length < fixedDecimal) { decimal = decimal.padEnd(fixedDecimal, "0") } else { decimal = parseFloat("0." + decimal) .toFixed(fixedDecimal) .split(".")[1] } } else { decimal = "0".repeat(fixedDecimal) } } return decimal ? `${int}.${decimal}` : int } }