Skip to content

Commit 3a3687e

Browse files
committed
byteformats: add k-based byte formatters
1 parent 449f8b4 commit 3a3687e

1 file changed

Lines changed: 34 additions & 2 deletions

File tree

common/byteformats/formats.go

Lines changed: 34 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,10 @@ import (
66
)
77

88
var (
9-
unitNames = []string{"B", "kB", "MB", "GB", "TB", "PB", "EB"}
10-
iUnitNames = []string{"B", "KiB", "MiB", "GiB", "TiB", "PiB", "EiB"}
9+
unitNames = []string{"B", "kB", "MB", "GB", "TB", "PB", "EB"}
10+
iUnitNames = []string{"B", "KiB", "MiB", "GiB", "TiB", "PiB", "EiB"}
11+
kUnitNames = []string{"kB", "MB", "GB", "TB", "PB", "EB"}
12+
kiUnitNames = []string{"KiB", "MiB", "GiB", "TiB", "PiB", "EiB"}
1113
)
1214

1315
func formatBytes(s uint64, base float64, sizes []string) string {
@@ -25,6 +27,24 @@ func formatBytes(s uint64, base float64, sizes []string) string {
2527
return fmt.Sprintf(f, val, suffix)
2628
}
2729

30+
func formatKBytes(s uint64, base float64, sizes []string) string {
31+
if s == 0 {
32+
return fmt.Sprintf("0 %s", sizes[0])
33+
}
34+
e := math.Floor(logn(float64(s), base))
35+
if e < 1 {
36+
e = 1
37+
}
38+
suffix := sizes[int(e)-1]
39+
val := math.Floor(float64(s)/math.Pow(base, e)*10+0.5) / 10
40+
f := "%.0f %s"
41+
if val < 10 {
42+
f = "%.1f %s"
43+
}
44+
45+
return fmt.Sprintf(f, val, suffix)
46+
}
47+
2848
func logn(n, b float64) float64 {
2949
return math.Log(n) / math.Log(b)
3050
}
@@ -40,3 +60,15 @@ func FormatMemoryBytes(s uint64) string {
4060
func FormatIBytes(s uint64) string {
4161
return formatBytes(s, 1024, iUnitNames)
4262
}
63+
64+
func FormatKBytes(s uint64) string {
65+
return formatKBytes(s, 1000, kUnitNames)
66+
}
67+
68+
func FormatMemoryKBytes(s uint64) string {
69+
return formatKBytes(s, 1024, kUnitNames)
70+
}
71+
72+
func FormatKIBytes(s uint64) string {
73+
return formatKBytes(s, 1024, kiUnitNames)
74+
}

0 commit comments

Comments
 (0)