fix: fmtBytes 大文件显示成 PiB(累除逻辑错误)+ 改用 KB/MB/GB 单位

原实现循环里 n = x / 1024 每次都用原始 x 除一次,未累除,导致大文件
一路跌到 PiB 分支显示错误值。改为 while 循环每次 x /= 1000 累除,
单位改为 B/KB/MB/GB/TB/PB(1000 进制),B 显示整数其余保留 1 位小数。
This commit is contained in:
zikai
2026-07-21 14:52:44 +00:00
parent 7188c62d3a
commit 7bacc33679

View File

@@ -61,15 +61,15 @@
} }
function fmtBytes(n) { function fmtBytes(n) {
if (n == null) return "-"; let x = Number(n);
const x = Number(n); if (n == null || !isFinite(x)) return "-";
if (!isFinite(x)) return "-"; const units = ["B", "KB", "MB", "GB", "TB", "PB"];
for (const unit of ["B", "KiB", "MiB", "GiB", "TiB", "PiB"]) { let i = 0;
if (Math.abs(x) < 1024 || unit === "PiB") while (Math.abs(x) >= 1000 && i < units.length - 1) {
return unit === "B" ? `${x} B` : `${x.toFixed(1)} ${unit}`; x /= 1000;
n = x / 1024; i++;
} }
return `${n.toFixed(1)} PiB`; return i === 0 ? `${Math.round(x)} ${units[i]}` : `${x.toFixed(1)} ${units[i]}`;
} }
function fmtTime(s) { function fmtTime(s) {