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