Format byte size as kilobytes, megabytes, gigabytes, ...

yourbasic.org/golang

These utility functions convert a size in bytes to a human-readable string in either SI (decimal) or IEC (binary) format.

Input ByteCountSI ByteCountIEC
999 "999 B" "999 B"
1000 "1.0 kB" "1000 B"
1023 "1.0 kB" "1023 B"
1024 "1.0 kB" "1.0 KiB"
987,654,321 "987.7 MB" "941.9 MiB"
math.MaxInt64 "9.2 EB" "8.0 EiB"

func ByteCountSI(b int64) string {
	const unit = 1000
	if b < unit {
		return fmt.Sprintf("%d B", b)
	}
	div, exp := int64(unit), 0
	for n := b / unit; n >= unit; n /= unit {
		div *= unit
		exp++
	}
	return fmt.Sprintf("%.1f %cB",
		float64(b)/float64(div), "kMGTPE"[exp])
}

func ByteCountIEC(b int64) string {
	const unit = 1024
	if b < unit {
		return fmt.Sprintf("%d B", b)
	}
	div, exp := int64(unit), 0
	for n := b / unit; n >= unit; n /= unit {
		div *= unit
		exp++
	}
	return fmt.Sprintf("%.1f %ciB",
		float64(b)/float64(div), "KMGTPE"[exp])
}

byte-count.go

More code examples

Go blueprints: code for com­mon tasks is a collection of handy code examples.

Share this page: