@@ -6,8 +6,10 @@ import (
66)
77
88var (
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
1315func 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+
2848func logn (n , b float64 ) float64 {
2949 return math .Log (n ) / math .Log (b )
3050}
@@ -40,3 +60,15 @@ func FormatMemoryBytes(s uint64) string {
4060func 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