Files
exchange_go/pkg/utility/biginthelper/biginthelper.go
2025-02-06 11:14:33 +08:00

120 lines
2.1 KiB
Go

package biginthelper
import (
"bytes"
"fmt"
"math/big"
"strings"
)
// BigIntString BigIntString
func BigIntString(balance *big.Int, decimals int64) string {
amount := BigIntFloat(balance, decimals)
deci := fmt.Sprintf("%%0.%vf", decimals)
return clean(fmt.Sprintf(deci, amount))
}
// BigIntFloat BigIntFloat
func BigIntFloat(balance *big.Int, decimals int64) *big.Float {
if balance.Sign() == 0 {
return big.NewFloat(0)
}
bal := new(big.Float)
bal.SetInt(balance)
pow := bigPow(10, decimals)
p := big.NewFloat(0)
p.SetInt(pow)
bal.Quo(bal, p)
return bal
}
func bigPow(a, b int64) *big.Int {
r := big.NewInt(a)
return r.Exp(r, big.NewInt(b), nil)
}
func clean(newNum string) string {
stringBytes := bytes.TrimRight([]byte(newNum), "0")
newNum = string(stringBytes)
if stringBytes[len(stringBytes)-1] == 46 {
newNum += "0"
}
if stringBytes[0] == 46 {
newNum = "0" + newNum
}
return newNum
}
// GetActualHex 获取真实的十六进制..
func GetActualHex(h string) string {
h = strings.TrimLeft(h, "0")
var hex string
if strings.Index(h, "0x") == 0 {
hex = h[2:]
} else {
hex = h
}
if len(h)%2 != 0 {
hex = "0" + hex
}
return "0x" + hex
}
// HexToBig HexToBig
func HexToBig(h string) *big.Int {
i := big.NewInt(0)
h = strings.Replace(h, "0x", "", -1)
if h == "" {
return i
}
if _, ok := i.SetString(h, 16); !ok {
return nil
}
return i
}
// ConvertNumToFloat ConvertNumToFloat
func ConvertNumToFloat(num int64) float64 {
switch num {
case 1:
return 10.0
case 2:
return 100.0
case 3:
return 1000.0
case 4:
return 10000.0
case 5:
return 100000.0
case 6:
return 1000000.0
case 7:
return 10000000.0
case 8:
return 100000000.0
case 9:
return 1000000000.0
case 10:
return 10000000000.0
case 11:
return 100000000000.0
case 12:
return 1000000000000.0
case 13:
return 10000000000000.0
case 14:
return 100000000000000.0
case 15:
return 1000000000000000.0
case 16:
return 10000000000000000.0
case 17:
return 100000000000000000.0
case 18:
return 1000000000000000000.0
default:
return 0.0
}
}