export default class DisplayNumber { private static aLetters: any = [ "K", 3, "M", 6, "B", 9, "T", 12, "aa", 15, "bb", 18, "cc", 21, "dd", 24, "ee", 27, "ff", 30, "gg", 33, "hh", 36, "ii", 39, "jj", 42, "kk", 45, "ll", 48, "mm", 51, "nn", 54, "oo", 57, "pp", 60, "qq", 63, "rr", 66, "ss", 69, "tt", 72, "uu", 75, "vv", 78, "ww", 81, "xx", 84, "yy", 87, "zz", 90, "aaa", 93, "bbb", 96, "ccc", 99, "ddd", 102, "eee", 105, "fff", 108, "ggg", 111, "hhh", 114, "iii", 117, "jjj", 120, "kkk", 123, "lll", 126, "mmm", 129, "nnn", 132, "ooo", 135, "ppp", 138, "qqq", 141, "rrr", 144, "sss", 147, "ttt", 150, "uuu", 153, "vvv", 156, "www", 159, "xxx", 162, "yyy", 165, "zzz", 168, "aaaa", 171, "bbbb", 174, "cccc", 177, "dddd", 180, "eeee", 183, "ffff", 186, "gggg", 189, "hhhh", 192, "iiii", 195, "jjjj", 198, "kkkk", 201, "llll", 204, "mmmm", 207, "nnnn", 210, "oooo", 213, "pppp", 216, "qqqq", 219, "rrrr", 222, "ssss", 225, "tttt", 228, "uuuu", 231, "vvvv", 234, "wwww", 237, "xxxx", 240, "yyyy", 243, "zzzz", 246, "aaaaa", 249, "bbbbb", 252, "ccccc", 255, "ddddd", 258, "eeeee", 261, "fffff", 264, "ggggg", 267, "hhhhh", 270, "iiiii", 273, "jjjjj", 276, "kkkkk", 279, "lllll", 282, "mmmmm", 285, "nnnnn", 288, "ooooo", 291, "ppppp", 294, "qqqqq", 297, "rrrrr", 300, "sssss", 303, "ttttt", 306, "uuuuu", 309, "vvvvv", 312, "wwwww", 315, "xxxxx", 318, "yyyyy", 321, "zzzzz", 324, ]; static displayNumber(num: number, afterdot: number = 5): string { if (num === 0) return "0"; // 处理负数 const isNegative = num < 0; const absNum = Math.abs(num); // 找到合适的缩写 let letter = ""; let divisor = 1; for (let i = 0; i < this.aLetters.length; i += 2) { const currentLetter = this.aLetters[i]; const currentPower = this.aLetters[i + 1]; const currentDivisor = Math.pow(10, currentPower); if (absNum >= currentDivisor) { letter = currentLetter; divisor = currentDivisor; } else { break; } } // 计算缩写后的数值 const abbreviatedNum = absNum / divisor; // 直接截断到指定的小数位数,不进行四捨五入 const multiplier = Math.pow(10, afterdot); const truncatedNum = Math.floor(abbreviatedNum * multiplier) / multiplier; // 格式化数字,保留指定的小数位数 let formattedNum = truncatedNum.toFixed(afterdot); // 如果afterdot为0,直接返回整数部分 if (afterdot === 0) { formattedNum = Math.floor(abbreviatedNum).toString(); } else { // 移除末尾的0,但保留afterdot指定的位数 const parts = formattedNum.split('.'); if (parts.length > 1) { const integerPart = parts[0]; let decimalPart = parts[1]; // 只保留afterdot指定的位数,移除多余的0 decimalPart = decimalPart.substring(0, afterdot).replace(/0+$/, ''); if (decimalPart.length > 0) { formattedNum = integerPart + '.' + decimalPart; } else { formattedNum = integerPart; } } } // 添加负号(如果有) const sign = isNegative ? "-" : ""; return sign + formattedNum + letter; } }