"model/models/vscode:/vscode.git/clone" did not exist on "517807cdf29d2c8d22bc748a2cfde2b61bd67c98"
bytes.go 858 Bytes
Newer Older
Michael Yang's avatar
Michael Yang committed
1
2
package format

3
4
5
6
import (
	"fmt"
	"math"
)
Michael Yang's avatar
Michael Yang committed
7

Michael Yang's avatar
Michael Yang committed
8
9
10
11
12
const (
	Byte     = 1
	KiloByte = Byte * 1000
	MegaByte = KiloByte * 1000
	GigaByte = MegaByte * 1000
Michael Yang's avatar
Michael Yang committed
13
	TeraByte = GigaByte * 1000
Michael Yang's avatar
Michael Yang committed
14
15
)

Michael Yang's avatar
Michael Yang committed
16
func HumanBytes(b int64) string {
17
18
19
	var value float64
	var unit string

Michael Yang's avatar
Michael Yang committed
20
	switch {
21
22
23
24
25
26
27
28
29
30
31
32
	case b >= TeraByte:
		value = float64(b) / TeraByte
		unit = "TB"
	case b >= GigaByte:
		value = float64(b) / GigaByte
		unit = "GB"
	case b >= MegaByte:
		value = float64(b) / MegaByte
		unit = "MB"
	case b >= KiloByte:
		value = float64(b) / KiloByte
		unit = "KB"
Michael Yang's avatar
Michael Yang committed
33
34
35
	default:
		return fmt.Sprintf("%d B", b)
	}
36
37
38
39

	switch {
	case value >= 100:
		return fmt.Sprintf("%d %s", int(value), unit)
Michael Yang's avatar
Michael Yang committed
40
41
	case value >= 10:
		return fmt.Sprintf("%d %s", int(value), unit)
42
43
44
45
46
	case value != math.Trunc(value):
		return fmt.Sprintf("%.1f %s", value, unit)
	default:
		return fmt.Sprintf("%d %s", int(value), unit)
	}
Michael Yang's avatar
Michael Yang committed
47
}