1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 |
- 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)
- }
- }
|