/** * 流量数字显示成人读的样子。连接页和仪表盘共用。 * * 1024 进制。B 一档不带小数;其余不满 100 的保留一位小数,够 100 的取整—— * 「23.4 MB」有信息量,「234.7 MB」的小数就只是噪音了。 */ const UNITS = ['B', 'KB', 'MB', 'GB', 'TB'] as const export function formatBytes(bytes: number): string { if (!Number.isFinite(bytes) || bytes < 0) return '0 B' let value = bytes let unit = 0 while (value >= 1024 && unit < UNITS.length - 1) { value /= 1024 unit += 1 } const digits = unit === 0 || value >= 100 ? 0 : 1 // Number() 去掉无意义的尾零:1.0 KB → 1 KB return `${String(Number(value.toFixed(digits)))} ${UNITS[unit]}` } /** 运行时长。一小时内说分钟,一天内说时分,再长说天和小时;秒级抖动没有信息量。 */ export function formatUptime(seconds: number): string { if (!Number.isFinite(seconds) || seconds < 0) return '—' const minutes = Math.floor(seconds / 60) if (minutes < 60) return `${String(minutes)} 分钟` const hours = Math.floor(minutes / 60) if (hours < 24) return `${String(hours)} 小时 ${String(minutes % 60)} 分` return `${String(Math.floor(hours / 24))} 天 ${String(hours % 24)} 小时` }