From d21bb015e875ab0fcc563e0887b2a83eeeb70898 Mon Sep 17 00:00:00 2001
From: GyDi <zzzgydi@gmail.com>
Date: Sun, 20 Nov 2022 23:08:24 +0800
Subject: [PATCH] fix: pretty bytes

---
 src/utils/parse-traffic.ts | 32 +++++++-------------------------
 1 file changed, 7 insertions(+), 25 deletions(-)

diff --git a/src/utils/parse-traffic.ts b/src/utils/parse-traffic.ts
index b19e31f..2e7eacf 100644
--- a/src/utils/parse-traffic.ts
+++ b/src/utils/parse-traffic.ts
@@ -1,30 +1,12 @@
-/**
- * parse the traffic to
- * xxx B
- * xxx KB
- * xxx MB
- * xxx GB
- */
+const UNITS = ["B", "KB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB"];
+
 const parseTraffic = (num: number) => {
-  const gb = 1024 ** 3;
-  const mb = 1024 ** 2;
-  const kb = 1024;
-  let t = num;
-  let u = "B";
+  if (num < 1000) return [`${Math.round(num)}`, "B"];
+  const exp = Math.min(Math.floor(Math.log10(num) / 3), UNITS.length - 1);
+  const ret = (num / Math.pow(1000, exp)).toPrecision(3);
+  const unit = UNITS[exp];
 
-  if (num < 1000) return [`${Math.round(t)}`, "B"];
-  if (num <= mb) {
-    t = num / kb;
-    u = "KB";
-  } else if (num <= gb) {
-    t = num / mb;
-    u = "MB";
-  } else {
-    t = num / gb;
-    u = "GB";
-  }
-  if (t >= 100) return [`${Math.round(t)}`, u];
-  return [`${Math.round(t * 10) / 10}`, u];
+  return [ret, unit];
 };
 
 export default parseTraffic;
-- 
GitLab