package clean import ( "fmt" util "jygit.jydev.jianyu360.cn/data_processing/common_utils" "math" "regexp" "strconv" "strings" ) var ( moneyReg1 = regexp.MustCompile("([\\s ,]+)") moneyReg2 = regexp.MustCompile("^([0-9.]+)E([1-7])$") numReg1 = regexp.MustCompile("([0-9\\.]+)") ) // 清洗金额 func CleanMoney(money interface{}) float64 { tmpstr := "" if _, ok := money.(float64); ok { tmpstr = fmt.Sprintf("%f", money) } else { tmpstr = util.ObjToString(money) } //去除空格 tmpstr = moneyReg1.ReplaceAllString(tmpstr, "") //科学计数法 if moneyReg2.MatchString(tmpstr) { price := util.Float64All(moneyReg2.ReplaceAllString(tmpstr, "${1}")) if unit := util.Float64All(moneyReg2.ReplaceAllString(tmpstr, "${2}")); unit > 0.0 && price > 0.0 { tmpstr = fmt.Sprintf("%f", math.Pow(10, unit)*price) } } if num := numReg1.FindString(tmpstr); num != "" { f_num := util.Float64All(num) if strings.Contains(tmpstr, "万") { f, _ := strconv.ParseFloat(strconv.FormatFloat(f_num*10000.0, 'f', 4, 64), 64) return f } else if strings.Contains(tmpstr, "亿") { f, _ := strconv.ParseFloat(strconv.FormatFloat(f_num*10000.0*10000.0, 'f', 4, 64), 64) return f } else { f, _ := strconv.ParseFloat(strconv.FormatFloat(f_num, 'f', 4, 64), 64) return f } } return 0.0 }