Skip to content

Instantly share code, notes, and snippets.

@RepSklvska
Last active September 27, 2020 03:17
Show Gist options
  • Save RepSklvska/a69ef5394db61e590cd6d95cf03d4905 to your computer and use it in GitHub Desktop.
Save RepSklvska/a69ef5394db61e590cd6d95cf03d4905 to your computer and use it in GitHub Desktop.
File size formatting - Golang
// 传入一个B为单位的整数,返回适合在文件浏览器里显示的三位数加两位小数的大小,带单位,抹零。
// 例如:
// 102369888 -> 97.63MB
// 527360 -> 515KB
// 4680843264 -> 4.36GB
package abc
import (
"strconv"
"strings"
)
func ComputeSize(size int64) string {
var s int = int(size)
if s == 0 {
return "0B"
}
if s < 1024 {
return strconv.Itoa(s) + "B"
}
if s < 1048576 {
return strconv.Itoa(s/1024) + "KB"
}
if s < 1073741824 {
num := fmt.Sprintf("%.2f", float64(s)/1048576)
num = strings.TrimRight(num, "0")
num = strings.TrimRight(num, ".")
if num == "1024" {
return "1GB"
}
return num + "MB"
}
if s < 1099511627776 {
num := fmt.Sprintf("%.2f", float64(s)/1073741824)
num = strings.TrimRight(num, "0")
num = strings.TrimRight(num, ".")
if num == "1024" {
return "1TB"
}
return num + "GB"
}
if s < 1125899906842624 {
num := fmt.Sprintf("%.3f", float64(s)/1099511627776)
num = strings.TrimRight(num, "0")
num = strings.TrimRight(num, ".")
if num == "1024" {
return "1PB"
}
return num + "TB"
}
if s < 1152921504606846976 {
num := fmt.Sprintf("%.3f", float64(s)/1125899906842624)
num = strings.TrimRight(num, "0")
num = strings.TrimRight(num, ".")
if num == "1024" {
return "1EB"
}
return num + "PB"
}
{
num := fmt.Sprintf("%.3f", float64(s)/1125899906842624)
num = strings.TrimRight(num, "0")
num = strings.TrimRight(num, ".")
return num + "EB"
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment