123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 |
- package format
- import (
- "fmt"
- "math"
- )
- const (
- Byte = 1
- KiloByte = Byte * 1000
- MegaByte = KiloByte * 1000
- GigaByte = MegaByte * 1000
- TeraByte = GigaByte * 1000
- KibiByte = Byte * 1024
- MebiByte = KibiByte * 1024
- GibiByte = MebiByte * 1024
- )
- func HumanBytes(b int64) string {
- var value float64
- var unit string
- switch {
- 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"
- default:
- return fmt.Sprintf("%d B", b)
- }
- switch {
- case value >= 100:
- return fmt.Sprintf("%d %s", int(value), unit)
- case value >= 10:
- return fmt.Sprintf("%d %s", int(value), unit)
- case value != math.Trunc(value):
- return fmt.Sprintf("%.1f %s", value, unit)
- default:
- return fmt.Sprintf("%d %s", int(value), unit)
- }
- }
- func HumanBytes2(b uint64) string {
- switch {
- case b >= GibiByte:
- return fmt.Sprintf("%.1f GiB", float64(b)/GibiByte)
- case b >= MebiByte:
- return fmt.Sprintf("%.1f MiB", float64(b)/MebiByte)
- case b >= KibiByte:
- return fmt.Sprintf("%.1f KiB", float64(b)/KibiByte)
- default:
- return fmt.Sprintf("%d B", b)
- }
- }
|