Compare commits
6 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 24904dde66 | |||
| d6173c8675 | |||
| 41a06f6b45 | |||
| 372fd452c7 | |||
| e28948f8cd | |||
| 9ed193cc48 |
@@ -0,0 +1,57 @@
|
|||||||
|
package proxmoxaas_common_lib
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"log"
|
||||||
|
"math"
|
||||||
|
"strings"
|
||||||
|
)
|
||||||
|
|
||||||
|
const Base1000 uint64 = 1000
|
||||||
|
const Base1024 uint64 = 1024
|
||||||
|
|
||||||
|
var prefixesBase1000 []string = []string{"", "K", "M", "G", "T"}
|
||||||
|
var prefixesBase1024 []string = []string{"", "Ki", "Mi", "Gi", "Ti"}
|
||||||
|
|
||||||
|
const KB uint64 = Base1000
|
||||||
|
const MB uint64 = KB * Base1000
|
||||||
|
const GB uint64 = MB * Base1000
|
||||||
|
const TB uint64 = GB * Base1000
|
||||||
|
|
||||||
|
const KiB uint64 = Base1024
|
||||||
|
const MiB uint64 = KiB * Base1024
|
||||||
|
const GiB uint64 = MiB * Base1024
|
||||||
|
const TiB uint64 = GiB * Base1024
|
||||||
|
|
||||||
|
func FormatNumber(val uint64, base uint64) (string, string) {
|
||||||
|
prefixes := []string{""}
|
||||||
|
switch base {
|
||||||
|
case Base1000:
|
||||||
|
prefixes = prefixesBase1000
|
||||||
|
case Base1024:
|
||||||
|
prefixes = prefixesBase1024
|
||||||
|
default:
|
||||||
|
}
|
||||||
|
|
||||||
|
valf := float64(val)
|
||||||
|
basef := float64(base)
|
||||||
|
steps := 0
|
||||||
|
for math.Abs(valf) > basef && steps < len(prefixes)-1 {
|
||||||
|
valf /= basef
|
||||||
|
steps++
|
||||||
|
}
|
||||||
|
|
||||||
|
s := fmt.Sprintf("%.4f", valf)
|
||||||
|
s = strings.TrimRight(s, "0")
|
||||||
|
s = strings.TrimRight(s, ".")
|
||||||
|
return s, prefixes[steps]
|
||||||
|
}
|
||||||
|
|
||||||
|
// Converts int, int32, and int64 to uint64. Less than 0 check.
|
||||||
|
func SafeUint64[I int | int32 | int64](i I) uint64 {
|
||||||
|
if i < 0 {
|
||||||
|
log.Printf("Tried to cast %d to uint64", i)
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
return uint64(i)
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user