package convx import ( "strconv" "errors" ) // interface 转 float64 func ToFloat64(val interface{}) (f float64, err error) { if v, ok := val.(string); ok { f, err = strconv.ParseFloat(v, 64) } else if v, ok := val.(float64); ok { return v, nil } else if v, ok := val.(float32); ok { return float64(v), nil } else if v, ok := val.(int); ok { return float64(v), nil } else if v, ok := val.(int8); ok { return float64(v), nil } else if v, ok := val.(int16); ok { return float64(v), nil } else if v, ok := val.(int32); ok { return float64(v), nil } else if v, ok := val.(int64); ok { return float64(v), nil } else if v, ok := val.(uint); ok { return float64(v), nil } else if v, ok := val.(uint8); ok { return float64(v), nil } else if v, ok := val.(uint16); ok { return float64(v), nil } else if v, ok := val.(uint32); ok { return float64(v), nil } else if v, ok := val.(uint64); ok { return float64(v), nil } else if v, ok := val.(bool); ok { if v { return 1, nil } else { return 0, nil } } else { return 0, errors.New("类型转换失败") } return }