123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- 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
- }
|