formatBigNumber

This commit is contained in:
ckcz123 2021-08-30 22:04:38 +08:00
parent edb9d5037f
commit f3f6a6ff75

View File

@ -510,41 +510,32 @@ utils.prototype.formatSize = function (size) {
else return (size/1024/1024).toFixed(2) + "MB"; else return (size/1024/1024).toFixed(2) + "MB";
} }
utils.prototype.formatBigNumber = function (x, onMap) { utils.prototype.formatBigNumber = function (x, digits) {
x = Math.floor(parseFloat(x)); if (digits === true) digits = 5; // 兼容旧版onMap参数
if (!core.isset(x) || !Number.isFinite(x)) return '???'; if (!digits || digits < 5) digits = 6; // 连同负号、小数点和后缀字母在内的总位数至少需为5默认为6
if (x > 1e24 || x < -1e24) return x.toExponential(2); x = Math.trunc(parseFloat(x)); // 尝试识别为小数然后向0取整
if (x == null || !Number.isFinite(x)) return '???'; // 无法识别的数或正负无穷大,显示'???'
var c = x < 0 ? "-" : ""; var units = [ // 单位及其后缀字母可自定义如改成千进制下的K、M、G、T、P
x = Math.abs(x); { "val": 1e20, "suffix": "g" },
{ "val": 1e16, "suffix": "j" },
if (x <= 99999 || (!onMap && x <= 999999)) return c + x; { "val": 1e12, "suffix": "z" },
{ "val": 1e8, "suffix": "e" },
var all = [ { "val": 10000, "suffix": "w" },
{"val": 1e20, "c": "g"}, ];
{"val": 1e16, "c": "j"}, if (Math.abs(x) > units[0].val * Math.pow(10, digits - 2))
{"val": 1e12, "c": "z"}, return x.toExponential(0); // 绝对值过大以致于失去精度的数,直接使用科学记数法,系数只保留整数
{"val": 1e8, "c": "e"}, var sign = x < 0 ? '-' : '';
{"val": 1e4, "c": "w"}, if (sign) --digits; // 符号位单独处理,负号要占一位
] x = Math.abs(x);
if (x.toString().length <= digits) return sign + x;
for (var i = 0; i < all.length; i++) { for (var i = 0; i < units.length; ++i) { // 从大到小尝试选取合适的单位
var one = all[i]; var each = units[i];
if (onMap) { if (x >= each.val) {
if (x >= one.val) { var v = x / each.val;
var v = x / one.val; return sign + v.toFixed(Math.max(0, Math.floor(digits - 2 - Math.log10(v + 1)))) + each.suffix;
return c + v.toFixed(Math.max(0, Math.floor(3 - Math.log10(v + 1)))) + one.c; }
} }
} return sign + x;
else {
if (x >= 10 * one.val) {
var v = x / one.val;
return c + v.toFixed(Math.max(0, Math.floor(4 - Math.log10(v + 1)))) + one.c;
}
}
}
return c + x;
} }
////// 变速移动 ////// ////// 变速移动 //////