120 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			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
 | 
						|
	}
 | 
						|
 | 
						|
}
 |