diff --git a/backend/scanner.js b/backend/scanner.js
index 52173fe..a58969e 100644
--- a/backend/scanner.js
+++ b/backend/scanner.js
@@ -65,7 +65,8 @@ function readJson(file) {
}
function fmtMb(bytes) {
- return Number((bytes / 1024 / 1024).toFixed(1))
+ // 保留到 KB 级精度:toFixed(1) 会把 <0.05MB 的轻量包(几 KB~几十 KB)截成 0
+ return Math.round((bytes / 1024 / 1024) * 1024) / 1024
}
// 目录名 → 包名(支持 scoped:@scope/name)
diff --git a/frontend/src/components/CleanDialog.vue b/frontend/src/components/CleanDialog.vue
index 607730f..8ce3120 100644
--- a/frontend/src/components/CleanDialog.vue
+++ b/frontend/src/components/CleanDialog.vue
@@ -1,6 +1,6 @@
diff --git a/frontend/src/store/index.js b/frontend/src/store/index.js
index da9dd69..f8e9204 100644
--- a/frontend/src/store/index.js
+++ b/frontend/src/store/index.js
@@ -64,16 +64,22 @@ const stats = computed(() => {
function fmtSize(mb) {
if (mb >= 1024) return `${(mb / 1024).toFixed(1)} GB`
- return `${mb.toFixed(1)} MB`
+ if (mb >= 0.05) return `${mb.toFixed(1)} MB`
+ if (mb > 0) return `${Math.max(1, Math.round(mb * 1024))} KB`
+ return '0 MB'
}
/** 字节 → 可读文本 */
function fmtBytes(b) {
const mb = b / 1024 / 1024
if (mb >= 1024) return `${(mb / 1024).toFixed(1)} GB`
- return `${mb.toFixed(1)} MB`
+ if (mb >= 0.05) return `${mb.toFixed(1)} MB`
+ if (mb > 0) return `${Math.max(1, Math.round(mb * 1024))} KB`
+ return '0 MB'
}
+export { fmtSize, fmtBytes }
+
const fmtSizeFn = fmtSize
async function refreshPackages(keyword = '') {
diff --git a/frontend/src/views/IgnoredView.vue b/frontend/src/views/IgnoredView.vue
index 02ea4f0..9b5d8de 100644
--- a/frontend/src/views/IgnoredView.vue
+++ b/frontend/src/views/IgnoredView.vue
@@ -1,6 +1,6 @@