字节数转换为 KB、MB、GB 等更易读的格式
1 | |
这段 Go 语言代码定义了一个 formatBytes 函数,用于将字节大小(uint64 类型)转换为易读的字符串格式,例如 1.23 KB、4.56 GB 等。具体逻辑如下:
单位定义
使用二进制单位(1024 进位),默认单位为 B(字节)。
- 单位后缀列表
"KMGTPE"依次对应:K(KiB = 1024¹)M(MiB = 1024²)G(GiB = 1024³)T(TiB = 1024⁴)P(PiB = 1024⁵)E(EiB = 1024⁶)
小字节直接饭回
1 | |
动态选择最大单位
通过循环找到最大的合适单位,这也是这个函数的核心部分
1 | |
假设 b = 3*1024³(即 3 GiB):
初始状态
div = 1024(单位基数从 KB 开始)exp = 0(单位索引对应K)
第一次循环
n := b / unit = (3*1024³) / 1024 = 3*1024²→n = 3*1024²- 检查条件
n >= unit→3*1024² >= 1024→ 成立 - 执行循环体:
div *= 1024→div = 1024²(现在基数对应 MB)exp++→exp=1(索引现在指向M)
- 更新
n = 3*1024² / 1024 = 3*1024→n=3072
第二次循环
- 检查条件
n >= unit→3072 >= 1024→ 成立 - 执行循环体:
div *= 1024→div = 1024³(基数对应 GB)exp++→exp=2(索引指向G)
- 更新
n = 3072 / 1024 = 3
- 检查条件
第三次循环
- 检查条件
n >= unit→3 >= 1024→ 不成立 - 循环终止
- 检查条件
格式化结果
1 | |
将字节数除以单位基数(div),并附加对应的单位符号,保留两位小数。
字节数转换为 KB、MB、GB 等更易读的格式
https://sunshinechen.cn/2025/11/07/字节数转换为 KB、MB、GB 等更易读的格式/