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  }