| 123456789101112131415161718192021222324252627282930313233343536 |
- package bytes
- import (
- "bytes"
- "fmt"
- "math"
- )
- // Format formats bytes to string. For example, 1024 returns 1 KB
- func Format(b uint64) string {
- return format(float64(b), false)
- }
- // FormatBin formats bytes to string as specified by ICE standard. For example,
- // 13.23 MiB.
- func FormatBin(b uint64) string {
- return format(float64(b), true)
- }
- func format(b float64, bin bool) string {
- unit := float64(1000)
- if bin {
- unit = 1024
- }
- if b < unit {
- return fmt.Sprintf("%.0f B", b)
- } else {
- exp := math.Floor(math.Log(b) / math.Log(unit))
- pfx := new(bytes.Buffer)
- pfx.WriteByte("KMGTPE"[uint8(exp)-1])
- if bin {
- pfx.WriteString("i")
- }
- return fmt.Sprintf("%.02f %sB", b/math.Pow(unit, exp), pfx)
- }
- }
|