67 lines
1.2 KiB
Go
67 lines
1.2 KiB
Go
package util
|
|
|
|
import (
|
|
"strconv"
|
|
"strings"
|
|
)
|
|
|
|
const (
|
|
// BYTE 字节
|
|
BYTE = 1 << (10 * iota)
|
|
// KILOBYTE 千字节
|
|
KILOBYTE
|
|
// MEGABYTE 兆字节
|
|
MEGABYTE
|
|
// GIGABYTE 吉字节
|
|
GIGABYTE
|
|
// TERABYTE 太字节
|
|
TERABYTE
|
|
// PETABYTE 拍字节
|
|
PETABYTE
|
|
// EXABYTE 艾字节
|
|
EXABYTE
|
|
)
|
|
|
|
// Bytefmt returns a human-readable byte string of the form 10M, 12.5K, and so forth. The following units are available:
|
|
// E: Exabyte
|
|
// P: Petabyte
|
|
// T: Terabyte
|
|
// G: Gigabyte
|
|
// M: Megabyte
|
|
// K: Kilobyte
|
|
// B: Byte
|
|
// The unit that results in the smallest number greater than or equal to 1 is always chosen.
|
|
func Bytefmt(bytes uint64) string {
|
|
unit := ""
|
|
value := float64(bytes)
|
|
|
|
switch {
|
|
case bytes >= EXABYTE:
|
|
unit = "E"
|
|
value = value / EXABYTE
|
|
case bytes >= PETABYTE:
|
|
unit = "P"
|
|
value = value / PETABYTE
|
|
case bytes >= TERABYTE:
|
|
unit = "T"
|
|
value = value / TERABYTE
|
|
case bytes >= GIGABYTE:
|
|
unit = "G"
|
|
value = value / GIGABYTE
|
|
case bytes >= MEGABYTE:
|
|
unit = "M"
|
|
value = value / MEGABYTE
|
|
case bytes >= KILOBYTE:
|
|
unit = "K"
|
|
value = value / KILOBYTE
|
|
case bytes >= BYTE:
|
|
unit = "B"
|
|
case bytes == 0:
|
|
return "0B"
|
|
}
|
|
|
|
result := strconv.FormatFloat(value, 'f', 2, 64)
|
|
result = strings.TrimSuffix(result, ".0")
|
|
return result + unit
|
|
}
|