-
-
Notifications
You must be signed in to change notification settings - Fork 13
/
quantity.go
36 lines (32 loc) · 898 Bytes
/
quantity.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
package commonfmt
import (
"errors"
"fmt"
)
func FmtByteCount(count int64, _3digitGroupCount int) (string, error) {
format := "%dB"
var v = int64(count)
singleGroup := _3digitGroupCount == 1
if _3digitGroupCount != 1 && _3digitGroupCount > 0 {
return "", errors.New("only one 3-digit group is supported for now")
}
switch {
case count >= 1_000_000_000_000 && (singleGroup || count%1_000_000_000_000 == 0):
format = "%dTB"
v /= 1_000_000_000_000
case count >= 1_000_000_000 && (singleGroup || count%1_000_000_000 == 0):
format = "%dGB"
v /= 1_000_000_000
case count >= 1_000_000 && (singleGroup || count%1_000_000 == 0):
format = "%dMB"
v /= 1_000_000
case count >= 1000 && (singleGroup || count%1_000 == 0):
format = "%dkB"
v /= 1_000
case count >= 0:
break
case count < 0:
return "", errors.New("invalid byte rate")
}
return fmt.Sprintf(format, v), nil
}