more clear document on weak conversions
diff --git a/mapstructure.go b/mapstructure.go
index d95886f..31c7bc4 100644
--- a/mapstructure.go
+++ b/mapstructure.go
@@ -24,13 +24,17 @@
 	// (extra keys).
 	ErrorUnused bool
 
-	// If WeaklyTypedInput is true, the decoder will convert values between
-	// the following types:
+	// If WeaklyTypedInput is true, the decoder will make the following
+	// "weak" conversions:
 	//
-	//    - numbers and bools
-	//    - strings and numbers
-	//    - strings and bools
-	//    - empty arrays/slices and empty maps
+	//   - bools to string (true = "1", false = "0")
+	//   - numbers to string (base 10)
+	//   - bools to int (true = 1, false = 0)
+	//   - strings to int (base implied by prefix)
+	//   - int to bool (value != 0 == true)
+	//   - string to bool (false/0 = false, anything else = true)
+	//   - empty array = empty map and vice versa
+	//
 	WeaklyTypedInput bool
 
 	// Metadata is the struct that will contain extra metadata about
@@ -237,14 +241,14 @@
 		val.SetInt(dataVal.Int())
 	case dataKind == reflect.Uint:
 		val.SetInt(int64(dataVal.Uint()))
+	case dataKind == reflect.Float32:
+		val.SetInt(int64(dataVal.Float()))
 	case dataKind == reflect.Bool && d.config.WeaklyTypedInput:
 		if dataVal.Bool() {
 			val.SetInt(1)
 		} else {
 			val.SetInt(0)
 		}
-	case dataKind == reflect.Float32:
-		val.SetInt(int64(dataVal.Float()))
 	case dataKind == reflect.String && d.config.WeaklyTypedInput:
 		i, err := strconv.ParseInt(dataVal.String(), 0, val.Type().Bits())
 		if err == nil {
@@ -270,14 +274,14 @@
 		val.SetUint(uint64(dataVal.Int()))
 	case dataKind == reflect.Uint:
 		val.SetUint(dataVal.Uint())
+	case dataKind == reflect.Float32:
+		val.SetUint(uint64(dataVal.Float()))
 	case dataKind == reflect.Bool && d.config.WeaklyTypedInput:
 		if dataVal.Bool() {
 			val.SetUint(1)
 		} else {
 			val.SetUint(0)
 		}
-	case dataKind == reflect.Float32:
-		val.SetUint(uint64(dataVal.Float()))
 	case dataKind == reflect.String && d.config.WeaklyTypedInput:
 		i, err := strconv.ParseUint(dataVal.String(), 0, val.Type().Bits())
 		if err == nil {
@@ -334,14 +338,14 @@
 		val.SetFloat(float64(dataVal.Int()))
 	case dataKind == reflect.Uint:
 		val.SetFloat(float64(dataVal.Uint()))
+	case dataKind == reflect.Float32:
+		val.SetFloat(float64(dataVal.Float()))
 	case dataKind == reflect.Bool && d.config.WeaklyTypedInput:
 		if dataVal.Bool() {
 			val.SetFloat(1)
 		} else {
 			val.SetFloat(0)
 		}
-	case dataKind == reflect.Float32:
-		val.SetFloat(float64(dataVal.Float()))
 	case dataKind == reflect.String && d.config.WeaklyTypedInput:
 		f, err := strconv.ParseFloat(dataVal.String(), val.Type().Bits())
 		if err == nil {
diff --git a/mapstructure_test.go b/mapstructure_test.go
index 83ebad3..de2374c 100644
--- a/mapstructure_test.go
+++ b/mapstructure_test.go
@@ -236,20 +236,20 @@
 		"StringToUint":  "42",
 		"StringToBool":  "1",
 		"StringToFloat": "42.42",
-		"SliceToMap":    []interface{} {},
-		"MapToSlice":    map[string]interface{} {},
+		"SliceToMap":    []interface{}{},
+		"MapToSlice":    map[string]interface{}{},
 	}
 
 	expectedResultStrict := TypeConversionResult{
-		IntToFloat:    42.0,
-		IntToUint:     42,
-		UintToInt:     42,
-		UintToFloat:   42,
-		BoolToInt:     0,
-		BoolToUint:    0,
-		BoolToFloat:   0,
-		FloatToInt:    42,
-		FloatToUint:   42,
+		IntToFloat:  42.0,
+		IntToUint:   42,
+		UintToInt:   42,
+		UintToFloat: 42,
+		BoolToInt:   0,
+		BoolToUint:  0,
+		BoolToFloat: 0,
+		FloatToInt:  42,
+		FloatToUint: 42,
 	}
 
 	expectedResultWeak := TypeConversionResult{
@@ -273,8 +273,8 @@
 		StringToUint:  42,
 		StringToBool:  true,
 		StringToFloat: 42.42,
-		SliceToMap:    map[string]interface{} {},
-		MapToSlice:    []interface{} {},
+		SliceToMap:    map[string]interface{}{},
+		MapToSlice:    []interface{}{},
 	}
 
 	// Test strict type conversion
@@ -311,7 +311,6 @@
 	}
 }
 
-
 func TestDecoder_ErrorUnused(t *testing.T) {
 	t.Parallel()