123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230 |
- package common
- import (
- "fmt"
- "math"
- "reflect"
- "strconv"
- "strings"
- "github.com/shopspring/decimal"
- )
- func StrToInt(str string) int {
- intValue, err := strconv.Atoi(str)
- if err != nil {
- intValue = int(StrToFloat(str))
- }
- return intValue
- }
- func FloatToStr(f float64) string {
-
-
-
-
-
-
-
-
-
-
- return strconv.FormatFloat(f, 'f', 2, 64)
- }
- func StrToFloat(str string) float64 {
- if str == "NaN" {
- return 0.0
- }
- str = strings.TrimSpace(str)
- str = TrimQff(str)
- intValue, err := strconv.ParseFloat(str, 64)
- if err != nil {
- intValue = 0
- }
- d := decimal.NewFromFloat(intValue)
-
- f, _ := d.Round(2).Float64()
- return f
- }
- func IntToStr(intvalue int) string {
- return strconv.Itoa(intvalue)
- }
- func TrimQff(str string) string {
- return strings.Replace(str, ",", "", -1)
- }
- func StrToFloatAll(str string) float64 {
- str = strings.TrimSpace(str)
- str = TrimQff(str)
- str = strings.ReplaceAll(str, "%", "")
- intValue, err := strconv.ParseFloat(str, 64)
- if err != nil {
- intValue = 0
- }
- d := decimal.NewFromFloat(intValue)
-
- f, _ := d.Float64()
- return f
- }
- func FloatToIntStr(floatValue float64) string {
-
- return strconv.Itoa(int(floatValue))
- }
- func FloatAllToStr(f float64) string {
- return strconv.FormatFloat(f, 'f', -1, 64)
- }
- func FormatAmt(n float64) string {
- return strconv.FormatFloat(n, 'f', 2, 64)
- }
- func IsNumeric(s string) bool {
- _, err := strconv.Atoi(s)
- return err == nil
- }
- func DecimalDivFF(v1 float64, v2 float64) float64 {
- r, _ := decimal.NewFromFloat(v1).Div(decimal.NewFromFloat(v2)).Float64()
- return r
- }
- func Round2(value float64) float64 {
- d := decimal.NewFromFloat(value)
-
- f, _ := d.Round(2).Float64()
- return f
- }
- func DecimalAddFF(v1 float64, v2 float64) float64 {
- r, _ := decimal.NewFromFloat(v1).Add(decimal.NewFromFloat(v2)).Float64()
- return r
- }
- func InterfaceToFloat(unk any) float64 {
- var floatType = reflect.TypeOf(float64(0))
- var stringType = reflect.TypeOf("")
- switch i := unk.(type) {
- case float64:
- return i
- case float32:
- return float64(i)
- case int64:
- return float64(i)
- case int32:
- return float64(i)
- case int:
- return float64(i)
- case uint64:
- return float64(i)
- case uint32:
- return float64(i)
- case uint:
- return float64(i)
- case string:
- f, _ := strconv.ParseFloat(i, 64)
- return f
- default:
- v := reflect.ValueOf(unk)
- v = reflect.Indirect(v)
- if v.Type().ConvertibleTo(floatType) {
- fv := v.Convert(floatType)
- return fv.Float()
- } else if v.Type().ConvertibleTo(stringType) {
- sv := v.Convert(stringType)
- s := sv.String()
- f, _ := strconv.ParseFloat(s, 64)
- return f
- } else {
- return math.NaN()
- }
- }
- }
- func FloatToFloat(f float64) float64 {
- ff, _ := strconv.ParseFloat(FloatToStr3(f), 64)
- return ff
- }
- func StrToFloat4(str string) any {
- if strings.Contains(str, `*`) {
- return str
- } else {
- if strings.Contains(str, `%`) {
- str = strings.ReplaceAll(str, `%`, ``)
- str = TrimQff(str)
- intValue, err := strconv.ParseFloat(str, 64)
- if err != nil {
- intValue = 0
- }
- d := decimal.NewFromFloat(intValue)
-
- f, _ := d.Round(2).Float64()
- return f / 100
- } else {
- str = TrimQff(str)
- intValue, err := strconv.ParseFloat(str, 64)
- if err != nil {
- intValue = 0
- }
- d := decimal.NewFromFloat(intValue)
-
- f, _ := d.Round(2).Float64()
- return f
- }
- }
- }
- func FloatToStr3(f float64) string {
- ss := strconv.FormatFloat(f, 'f', 2, 64)
- return doDecimal(ss)
- }
- func doDecimal(s string) string {
- if strings.Index(s, ".") < 0 {
- return s
- }
- l := len(s)
- if strings.HasSuffix(s, "0") {
- return doDecimal(s[0 : l-1])
- }
- if strings.HasSuffix(s, ".") {
- return doDecimal(s[0 : l-1])
- }
- return s
- }
- func FloatToFloat2(f float64) float64 {
- fstr := fmt.Sprintf("%0.2f", f)
- return StrToFloat(fstr)
- }
- func DecimalAddFS(v1 float64, v2 string) float64 {
- v2 = AmountFormat2str(v2)
- r := DecimalAddFF(v1, StrToFloat(v2))
- return r
- }
- func AmountFormat2str(str string) string {
- return strings.TrimSpace(strings.ReplaceAll(str, ",", ""))
- }
|