118 lines
2.2 KiB
Go
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
|
|
}
|