improve FormatNumber logic
This commit is contained in:
@@ -24,30 +24,27 @@ const GiB uint64 = MiB * Base1024
|
|||||||
const TiB uint64 = GiB * Base1024
|
const TiB uint64 = GiB * Base1024
|
||||||
|
|
||||||
func FormatNumber(val uint64, base uint64) (string, string) {
|
func FormatNumber(val uint64, base uint64) (string, string) {
|
||||||
|
prefixes := []string{""}
|
||||||
|
switch base {
|
||||||
|
case Base1000:
|
||||||
|
prefixes = prefixesBase1000
|
||||||
|
case Base1024:
|
||||||
|
prefixes = prefixesBase1024
|
||||||
|
default:
|
||||||
|
}
|
||||||
|
|
||||||
valf := float64(val)
|
valf := float64(val)
|
||||||
basef := float64(base)
|
basef := float64(base)
|
||||||
steps := 0
|
steps := 0
|
||||||
for math.Abs(valf) > basef && steps < 4 {
|
for math.Abs(valf) > basef && steps < len(prefixes)-1 {
|
||||||
valf /= basef
|
valf /= basef
|
||||||
steps++
|
steps++
|
||||||
}
|
}
|
||||||
|
|
||||||
switch base {
|
|
||||||
case Base1000:
|
|
||||||
s := fmt.Sprintf("%.4f", valf)
|
s := fmt.Sprintf("%.4f", valf)
|
||||||
s = strings.TrimRight(s, "0")
|
s = strings.TrimRight(s, "0")
|
||||||
s = strings.TrimRight(s, ".")
|
s = strings.TrimRight(s, ".")
|
||||||
prefixes := prefixesBase1000
|
|
||||||
return s, prefixes[steps]
|
return s, prefixes[steps]
|
||||||
case Base1024:
|
|
||||||
s := fmt.Sprintf("%.4f", valf)
|
|
||||||
s = strings.TrimRight(s, "0")
|
|
||||||
s = strings.TrimRight(s, ".")
|
|
||||||
prefixes := prefixesBase1024
|
|
||||||
return s, prefixes[steps]
|
|
||||||
default:
|
|
||||||
return "0", ""
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Converts int, int32, and int64 to uint64. Less than 0 check.
|
// Converts int, int32, and int64 to uint64. Less than 0 check.
|
||||||
|
|||||||
Reference in New Issue
Block a user