bytes.go 546 Bytes
Newer Older
Michael Yang's avatar
Michael Yang committed
1
2
3
4
package format

import "fmt"

Michael Yang's avatar
Michael Yang committed
5
6
7
8
9
const (
	Byte     = 1
	KiloByte = Byte * 1000
	MegaByte = KiloByte * 1000
	GigaByte = MegaByte * 1000
Michael Yang's avatar
Michael Yang committed
10
	TeraByte = GigaByte * 1000
Michael Yang's avatar
Michael Yang committed
11
12
)

Michael Yang's avatar
Michael Yang committed
13
14
func HumanBytes(b int64) string {
	switch {
Michael Yang's avatar
Michael Yang committed
15
16
	case b > TeraByte:
		return fmt.Sprintf("%.1f TB", float64(b)/TeraByte)
Michael Yang's avatar
Michael Yang committed
17
	case b > GigaByte:
18
		return fmt.Sprintf("%.1f GB", float64(b)/GigaByte)
Michael Yang's avatar
Michael Yang committed
19
	case b > MegaByte:
20
		return fmt.Sprintf("%.1f MB", float64(b)/MegaByte)
Michael Yang's avatar
Michael Yang committed
21
	case b > KiloByte:
22
		return fmt.Sprintf("%.1f KB", float64(b)/KiloByte)
Michael Yang's avatar
Michael Yang committed
23
24
25
26
	default:
		return fmt.Sprintf("%d B", b)
	}
}