mirror of
https://github.com/opentofu/opentofu.git
synced 2025-01-04 13:17:43 -06:00
cfa299d2ee
Nomad was manually updated, so revert that to the version in master, remove it from vendor.json and add it to the ignore list. Update all packages that were in an unknown state to their latest master commits.
109 lines
2.1 KiB
Go
109 lines
2.1 KiB
Go
package humanize
|
|
|
|
import (
|
|
"bytes"
|
|
"math"
|
|
"math/big"
|
|
"strconv"
|
|
"strings"
|
|
)
|
|
|
|
// Comma produces a string form of the given number in base 10 with
|
|
// commas after every three orders of magnitude.
|
|
//
|
|
// e.g. Comma(834142) -> 834,142
|
|
func Comma(v int64) string {
|
|
sign := ""
|
|
|
|
// minin64 can't be negated to a usable value, so it has to be special cased.
|
|
if v == math.MinInt64 {
|
|
return "-9,223,372,036,854,775,808"
|
|
}
|
|
|
|
if v < 0 {
|
|
sign = "-"
|
|
v = 0 - v
|
|
}
|
|
|
|
parts := []string{"", "", "", "", "", "", ""}
|
|
j := len(parts) - 1
|
|
|
|
for v > 999 {
|
|
parts[j] = strconv.FormatInt(v%1000, 10)
|
|
switch len(parts[j]) {
|
|
case 2:
|
|
parts[j] = "0" + parts[j]
|
|
case 1:
|
|
parts[j] = "00" + parts[j]
|
|
}
|
|
v = v / 1000
|
|
j--
|
|
}
|
|
parts[j] = strconv.Itoa(int(v))
|
|
return sign + strings.Join(parts[j:], ",")
|
|
}
|
|
|
|
// Commaf produces a string form of the given number in base 10 with
|
|
// commas after every three orders of magnitude.
|
|
//
|
|
// e.g. Commaf(834142.32) -> 834,142.32
|
|
func Commaf(v float64) string {
|
|
buf := &bytes.Buffer{}
|
|
if v < 0 {
|
|
buf.Write([]byte{'-'})
|
|
v = 0 - v
|
|
}
|
|
|
|
comma := []byte{','}
|
|
|
|
parts := strings.Split(strconv.FormatFloat(v, 'f', -1, 64), ".")
|
|
pos := 0
|
|
if len(parts[0])%3 != 0 {
|
|
pos += len(parts[0]) % 3
|
|
buf.WriteString(parts[0][:pos])
|
|
buf.Write(comma)
|
|
}
|
|
for ; pos < len(parts[0]); pos += 3 {
|
|
buf.WriteString(parts[0][pos : pos+3])
|
|
buf.Write(comma)
|
|
}
|
|
buf.Truncate(buf.Len() - 1)
|
|
|
|
if len(parts) > 1 {
|
|
buf.Write([]byte{'.'})
|
|
buf.WriteString(parts[1])
|
|
}
|
|
return buf.String()
|
|
}
|
|
|
|
// BigComma produces a string form of the given big.Int in base 10
|
|
// with commas after every three orders of magnitude.
|
|
func BigComma(b *big.Int) string {
|
|
sign := ""
|
|
if b.Sign() < 0 {
|
|
sign = "-"
|
|
b.Abs(b)
|
|
}
|
|
|
|
athousand := big.NewInt(1000)
|
|
c := (&big.Int{}).Set(b)
|
|
_, m := oom(c, athousand)
|
|
parts := make([]string, m+1)
|
|
j := len(parts) - 1
|
|
|
|
mod := &big.Int{}
|
|
for b.Cmp(athousand) >= 0 {
|
|
b.DivMod(b, athousand, mod)
|
|
parts[j] = strconv.FormatInt(mod.Int64(), 10)
|
|
switch len(parts[j]) {
|
|
case 2:
|
|
parts[j] = "0" + parts[j]
|
|
case 1:
|
|
parts[j] = "00" + parts[j]
|
|
}
|
|
j--
|
|
}
|
|
parts[j] = strconv.Itoa(int(b.Int64()))
|
|
return sign + strings.Join(parts[j:], ",")
|
|
}
|