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