golib/helper/conv_helper.go
2023-06-15 21:22:51 +08:00

118 lines
2.2 KiB
Go

//
// conv_helper.go
// Copyright (C) 2022 tiglog <me@tiglog.com>
//
// Distributed under terms of the MIT license.
//
package helper
import (
"strconv"
)
func AnyToInt(val any, dv int) (int, error) {
switch val.(type) {
case int:
rv, _ := val.(int)
return rv, nil
case int8:
rv, _ := val.(int8)
return int(rv), nil
case int16:
rv, _ := val.(int16)
return int(rv), nil
case int32:
rv, _ := val.(int32)
return int(rv), nil
case int64:
rv, _ := val.(int64)
return int(rv), nil
case string:
sv, _ := val.(string)
rv, err := strconv.Atoi(sv)
if err != nil {
return dv, err
}
return rv, nil
case float32:
rv, _ := val.(float32)
return int(rv), nil
case float64:
rv, _ := val.(float64)
return int(rv), nil
}
return dv, nil
}
func AnyToFloat(val any, dv float64) (float64, error) {
switch val.(type) {
case int:
iv, _ := val.(int)
return float64(iv), nil
case int8:
iv, _ := val.(int8)
return float64(iv), nil
case int16:
iv, _ := val.(int16)
return float64(iv), nil
case int32:
iv, _ := val.(int32)
return float64(iv), nil
case int64:
iv, _ := val.(int64)
return float64(iv), nil
case string:
sv, _ := val.(string)
return strconv.ParseFloat(sv, 64)
case float32:
fv, _ := val.(float32)
return float64(fv), nil
case float64:
fv, _ := val.(float64)
return fv, nil
}
return dv, nil
}
// 只处理简单数据类型
func AnyToString(val any, dv string) (string, error) {
switch val.(type) {
case string:
sv, _ := val.(string)
return sv, nil
case int:
iv, _ := val.(int)
return strconv.Itoa(iv), nil
case int8:
iv, _ := val.(int8)
return strconv.FormatInt(int64(iv), 10), nil
case int16:
iv, _ := val.(int16)
return strconv.FormatInt(int64(iv), 10), nil
case int32:
iv, _ := val.(int32)
return strconv.FormatInt(int64(iv), 10), nil
case int64:
iv, _ := val.(int64)
return strconv.FormatInt(iv, 10), nil
case float32:
fv, _ := val.(float32)
return strconv.FormatFloat(float64(fv), 'f', -1, 64), nil
case float64:
fv, _ := val.(float64)
return strconv.FormatFloat(fv, 'f', -1, 64), nil
case bool:
bv, _ := val.(bool)
if bv {
return "true", nil
}
return "false", nil
}
return dv, nil
}