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: