github.com/best4tires/kit@v1.0.5/convert/float.go (about) 1 package convert 2 3 import ( 4 "database/sql" 5 "strconv" 6 ) 7 8 // ToFloat tries to convert v into a float 9 func ToFloat(v interface{}) (float64, bool) { 10 switch v := v.(type) { 11 case int: 12 return float64(v), true 13 case int8: 14 return float64(v), true 15 case int16: 16 return float64(v), true 17 case int32: 18 return float64(v), true 19 case int64: 20 return float64(v), true 21 case uint8: 22 return float64(v), true 23 case uint16: 24 return float64(v), true 25 case uint32: 26 return float64(v), true 27 case uint64: 28 return float64(v), true 29 case float32: 30 return float64(v), true 31 case float64: 32 return float64(v), true 33 case bool: 34 switch v { 35 case true: 36 return 1, true 37 default: 38 return 0, true 39 } 40 case string: 41 f, err := strconv.ParseFloat(v, 64) 42 if err != nil { 43 return 0, false 44 } 45 return f, true 46 47 case sql.NullString: 48 return ToFloat(v.String) 49 case sql.NullInt64: 50 return ToFloat(v.Int64) 51 case sql.NullInt32: 52 return ToFloat(v.Int32) 53 case sql.NullInt16: 54 return ToFloat(v.Int16) 55 case sql.NullFloat64: 56 return ToFloat(v.Float64) 57 case sql.NullBool: 58 return ToFloat(v.Bool) 59 case sql.NullTime: 60 return ToFloat(v.Time) 61 case *sql.NullString: 62 return ToFloat(v.String) 63 case *sql.NullInt64: 64 return ToFloat(v.Int64) 65 case *sql.NullInt32: 66 return ToFloat(v.Int32) 67 case *sql.NullInt16: 68 return ToFloat(v.Int16) 69 case *sql.NullFloat64: 70 return ToFloat(v.Float64) 71 case *sql.NullBool: 72 return ToFloat(v.Bool) 73 case *sql.NullTime: 74 return ToFloat(v.Time) 75 76 default: 77 return 0, false 78 } 79 }