151 lines
3.1 KiB
Go
151 lines
3.1 KiB
Go
package lxutils
|
||
|
||
import (
|
||
"fmt"
|
||
"github.com/bytedance/sonic"
|
||
"github.com/shopspring/decimal"
|
||
"strconv"
|
||
"strings"
|
||
)
|
||
|
||
type H = map[string]interface{}
|
||
|
||
func Trim(str interface{}) string {
|
||
return strings.TrimSpace(fmt.Sprintf("%s", str))
|
||
}
|
||
func Aa() {
|
||
fmt.Println(123)
|
||
}
|
||
func LxMapStruct(v interface{}, v2 interface{}) (err error) {
|
||
resByre := []byte("")
|
||
switch v.(type) {
|
||
case string:
|
||
ft := v.(string)
|
||
resByre = []byte(ft)
|
||
default:
|
||
resByre, err = sonic.Marshal(v)
|
||
if err != nil {
|
||
return err
|
||
}
|
||
}
|
||
jsonRes := sonic.Unmarshal(resByre, v2)
|
||
if jsonRes != nil {
|
||
return jsonRes
|
||
}
|
||
return nil
|
||
}
|
||
|
||
// uint to string
|
||
func UintToStr(unitvalue uint) string {
|
||
return fmt.Sprintf("%d", unitvalue) // todo 只能用这么挫的方法吗
|
||
}
|
||
|
||
// int to string
|
||
func IntToStr(intvalue int) string {
|
||
return strconv.Itoa(intvalue)
|
||
}
|
||
|
||
// string to int
|
||
func StrToInt(str string) int {
|
||
intValue, err := strconv.Atoi(str)
|
||
if err != nil {
|
||
intValue = int(StrToFloat(str))
|
||
}
|
||
return intValue
|
||
}
|
||
|
||
func InterfaceToStr(a interface{}) (str string) {
|
||
b, _ := sonic.Marshal(a)
|
||
return string(b)
|
||
}
|
||
|
||
func StrToFloat(str string) float64 {
|
||
str = Trim(str)
|
||
str = TrimQff(str)
|
||
if str == "NaN" {
|
||
str = "0"
|
||
}
|
||
intValue, err := strconv.ParseFloat(str, 64)
|
||
if err != nil {
|
||
intValue = 0
|
||
}
|
||
d := decimal.NewFromFloat(intValue)
|
||
//fmt.Println(n.String())
|
||
f, _ := d.Round(2).Float64()
|
||
return f
|
||
}
|
||
func StrToUint(str string) uint {
|
||
intValue, _ := strconv.Atoi(str)
|
||
return uint(intValue)
|
||
}
|
||
|
||
// string 去千分符
|
||
func TrimQff(str string) string {
|
||
return strings.Replace(str, ",", "", -1)
|
||
}
|
||
func FloatToStr(f float64) string {
|
||
// 如果格式标记为 'e','E'和'f',则 prec 表示小数点后的数字位数
|
||
// 如果格式标记为 'g','G',则 prec 表示总的数字位数(整数部分+小数部分)
|
||
//func FormatFloat(f float64, fmt byte, prec, bitSize int) string
|
||
//f := 100.12345678901234567890123456789
|
||
//fmt.Println(strconv.FormatFloat(f, 'f', 5, 64))
|
||
// 100.12346
|
||
//fmt.Println(strconv.FormatFloat(f, 'g', 5, 64))
|
||
// 100.12
|
||
//fmt.Println(strconv.FormatFloat(f, 'G', 5, 64))
|
||
// 100.12
|
||
return strconv.FormatFloat(f, 'f', 2, 64)
|
||
}
|
||
|
||
// 截取两位小数
|
||
func Round2(value float64) float64 {
|
||
d := decimal.NewFromFloat(value)
|
||
f, _ := d.Round(2).Float64()
|
||
return f
|
||
}
|
||
|
||
// 截取三位小数
|
||
func Round3(value float64) float64 {
|
||
d := decimal.NewFromFloat(value)
|
||
f, _ := d.Round(3).Float64()
|
||
return f
|
||
}
|
||
|
||
func Round4(value float64) float64 {
|
||
d := decimal.NewFromFloat(value)
|
||
f, _ := d.Round(4).Float64()
|
||
return f
|
||
}
|
||
|
||
func RoundStr(value float64, n ...int32) string {
|
||
if value == 0 {
|
||
return ""
|
||
}
|
||
var s int32 = 2
|
||
if len(n) != 0 {
|
||
s = n[0]
|
||
}
|
||
amount1 := decimal.NewFromFloat(value)
|
||
return amount1.Round(s).StringFixed(s)
|
||
}
|
||
|
||
func Round1(value float64) float64 {
|
||
d := decimal.NewFromFloat(value)
|
||
//fmt.Println(n.String())
|
||
f, _ := d.Round(1).Float64()
|
||
return f
|
||
}
|
||
|
||
func RoundN(f float64, n int) float64 {
|
||
floatStr := fmt.Sprintf("%."+strconv.Itoa(n)+"f", f)
|
||
inst, _ := strconv.ParseFloat(floatStr, 64)
|
||
return inst
|
||
}
|
||
|
||
func Round(value float64, n int32) float64 {
|
||
d := decimal.NewFromFloat(value)
|
||
//fmt.Println(n.String())
|
||
f, _ := d.Round(n).Float64()
|
||
return f
|
||
}
|