package utils import "github.com/shopspring/decimal" func FloatAdd(src, dst float64, round int32) float64 { decimalResult := decimal.NewFromFloat(src).Add(decimal.NewFromFloat(dst)) return ParseRound(decimalResult, round) } func FloatAddSlice(data []float64, round int32) float64 { decimalResult := decimal.NewFromFloat(data[0]) for _, v := range data[1:] { decimalResult = decimalResult.Add(decimal.NewFromFloat(v)) } return ParseRound(decimalResult, round) } func FloatSub(src, dst float64, round int32) float64 { decimalResult := decimal.NewFromFloat(src).Sub(decimal.NewFromFloat(dst)) return ParseRound(decimalResult, round) } func FloatSubSlice(data []float64, round int32) float64 { decimalResult := decimal.NewFromFloat(data[0]) for _, v := range data[1:] { decimalResult = decimalResult.Sub(decimal.NewFromFloat(v)) } return ParseRound(decimalResult, round) } func FloatMul(src, dst float64, round int32) float64 { decimalResult := decimal.NewFromFloat(src).Mul(decimal.NewFromFloat(dst)) return ParseRound(decimalResult, round) } func FloatMulSlice(data []float64, round int32) float64 { decimalResult := decimal.NewFromFloat(data[0]) for _, v := range data[1:] { decimalResult = decimalResult.Mul(decimal.NewFromFloat(v)) } return ParseRound(decimalResult, round) } func FloatDiv(src, dst float64, round int32) float64 { decimalResult := decimal.NewFromFloat(src).Div(decimal.NewFromFloat(dst)) return ParseRound(decimalResult, round) } func ParseRound(decimalResult decimal.Decimal, round int32) float64 { if round >= 0 { decimalResult = decimalResult.Round(round) } res, _ := decimalResult.Float64() return res } func FloatRound(src float64, num int32) float64 { res, _ := decimal.NewFromFloat(src).Round(num).Float64() return res }