package helper import ( "fmt" "math/big" "strconv" "strings" ) //字节自动转换为B/KB/MB/GB func ByteToUnitSize(Size interface{}) (float64, string) { var unit string var iFloat, mb, gb float64 = 0, 1024, 1024 * 1024 iSize, _ := ToFloat64(Size) rSize := iSize / 1024 if rSize >= 0 && rSize < 1 { iFloat, unit = iSize, "B" } else if rSize >= 1 && rSize < mb { iFloat, unit = rSize, "KB" } else if rSize >= mb && rSize < gb { iFloat, unit = rSize/1024, "MB" } else if rSize >= gb { iFloat, unit = rSize/1024/1024, "GB" } return iFloat, unit } /** * 数值相加 * @param str 加数,加数... * 2020/05/22 * gz */ func FloatAdd(str ...interface{}) float64 { length := len(str) if length < 1 { return 0 } var i int = 0 var result, tmp float64 = 0, 0 var err error for i < length { tmp, err = ToFloat64(str[i]) if err == nil { result, _ = new(big.Float).Add(new(big.Float).SetFloat64(result), new(big.Float).SetFloat64(tmp)).Float64() } i++ } result, _ = strconv.ParseFloat(fmt.Sprintf("%.2f", result), 64) return result } /** * float相减 * @param str 被减数,减数... * 2020/05/22 * gz */ func FloatSub(str ...interface{}) float64 { length := len(str) if length < 1 { return 0 } var i int = 1 result, err := ToFloat64(str[0]) var tmp float64 = 0 for i < length { tmp, err = ToFloat64(str[i]) if err == nil { result, _ = new(big.Float).Sub(new(big.Float).SetFloat64(result), new(big.Float).SetFloat64(tmp)).Float64() } i++ } result, _ = strconv.ParseFloat(fmt.Sprintf("%.2f", result), 64) return result } /** * float相乘 * @param str 被除数,除数,保留小数位数 * 2020/05/25 * gz */ func FloatMul(str ...interface{}) float64 { if len(str) < 2 { return 0 } places := "2" //默认两位小数 if len(str) > 2 { places = ToString(str[2]) } float_1, _ := ToFloat64(str[0]) float_2, _ := ToFloat64(str[1]) ret, _ := new(big.Float).Mul(new(big.Float).SetFloat64(float_1), new(big.Float).SetFloat64(float_2)).Float64() ret, _ = strconv.ParseFloat(fmt.Sprintf("%."+places+"f", ret), 64) return ret } /** * float相除 * @param str 被除数,除数,保留小数位数 * 2020/05/25 * gz */ func FloatQuo(str ...interface{}) float64 { if len(str) < 2 { return 0 } places := "2" //默认两位小数 if len(str) > 2 { places = ToString(str[2]) } float_1, _ := ToFloat64(str[0]) float_2, _ := ToFloat64(str[1]) if float_2 <= 0 { return 0 } ret, _ := new(big.Float).Quo(new(big.Float).SetFloat64(float_1), new(big.Float).SetFloat64(float_2)).Float64() ret, _ = strconv.ParseFloat(fmt.Sprintf("%."+places+"f", ret), 64) return ret } /** * 十进制转十六进制 */ func DecToHex(ten int) string { m := 0 hex := make([]int, 0) for { m = ten % 16 ten = ten / 16 if ten == 0 { hex = append(hex, m) break } hex = append(hex, m) } hexStr := []string{} for i := len(hex) - 1; i >= 0; i-- { if hex[i] >= 10 { hexStr = append(hexStr, fmt.Sprintf("%c", 'A'+hex[i]-10)) } else { hexStr = append(hexStr, fmt.Sprintf("%d", hex[i])) } } return strings.Join(hexStr, "") } /** * 十六进制转十进制 */ func HexToDec(val string) (int, error) { n, err := strconv.ParseUint(val, 16, 64) if err != nil { return 0, err } return int(n), nil }