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;
  }
}
